none
Como convertir un nchar(5) a un varchar (40) ? RRS feed

  • Pregunta

  • Buenos días, espero y agradezco puedan ayudarme. El error es el siguiente: 

    Mens. 468, Nivel 16, Estado 9, Línea 15
    No se puede resolver el conflicto de intercalación entre 'SQL_Latin1_General_CP1_CI_AS' y 'Modern_Spanish_CI_AS' de la operación equal to.

    La linea es la siguiente:

    inner join Northwind_MART.dbo.Dim_cliente as clienteDM on (clienteDM.Cliente_codigo=cast(clienteDW.CustomerID as varchar(5)) ) 

    clienteDM.cliente_codigo es varchar(40) null y clienteDW.CustomerID es nchar(5) not null

    Gracias.

    lunes, 28 de diciembre de 2020 0:08

Todas las respuestas

  • Hola Tony Rojas:

    Tienes que utilizar collate para poder establecer una expresión de una columna en la misma intercalación.

    Create Table dim_cliente
    			 (
    			 cliente_codigo VarChar(40) Collate sql_latin1_general_cp1_ci_as
    		   , othercolumn    Int
    			 );
    
    Create Table customerdw
    			 (
    			 customer_id NVarchar(5) Collate modern_spanish_ci_as
    		   , other       Int
    			 );
    Go
    Insert into dim_cliente(cliente_codigo, othercolumn)
    values
    ('a',1);
    Insert into customerdw (customer_id, other)
    values
    ('a',2);
    go

    Una solución sería:

    select *
    from dim_cliente clienteDM 
    	inner join customerdw clienteDW
    		on cast (clienteDM.cliente_codigo as varchar(40)) collate modern_spanish_ci_as = customer_id;

    Collate

    https://docs.microsoft.com/es-es/sql/t-sql/statements/collations?view=sql-server-ver15

    lunes, 28 de diciembre de 2020 4:34