Conflicto de intercalación de SQL cuando se compara con una columna en una tabla temporal

StackOverflow https://stackoverflow.com/questions/1404880

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo una consulta SQL que compara un valor en la base de datos con una constante:

SELECT * FROM my_table
INNER JOIN #TempTable tem
    ON my_table.id = temp.id
    AND my_table.key = 'SOME STRING'

Y me sale el error:

Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.

¿Cómo puedo solucionar esto? (sin hacer cambios a la base de datos)

ACTUALIZACIÓN: Recibo este error incluso si elimino el último "me gusta" (la comparación de cadenas) ...

¿Fue útil?

Solución

Parece que los id son VARCHAR s con diferentes colaciones.

Prueba esto:

SELECT  *
FROM    my_table
INNER JOIN
        #TempTable tem
ON      my_table.id = temp.id COLLATE SQL_Latin1_General_CP1_CI_AS
        AND my_table.key = 'SOME STRING'

Otros consejos

Especifique la intercalación dentro de la declaración de su tabla temporal.

CREATE TABLE #TempTable (ID NVARCHAR(255) COLLATE database_default)

El problema es la tabla temporal. Utiliza la intercalación del tempdb.

Puedes crear una tabla en tu base de datos real y no una tabla temporal y luego tendrían la misma clasificación. O especifique la intercalación al crear la tabla temporal.

prueba

SELECT * FROM my_table
INNER JOIN #TempTable temp    
    ON my_table.id = temp.id collate database_default
    AND my_table.key = 'SOME STRING'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top