Conflicto de intercalación de SQL cuando se compara con una columna en una tabla temporal
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) ...
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