我有一个SQL查询,它将数据库中的值与常量进行比较:
SELECT * FROM my_table
INNER JOIN #TempTable tem
ON my_table.id = temp.id
AND my_table.key = 'SOME STRING'
我收到错误:
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.
我该如何解决这个问题? (不对数据库进行更改)
更新:即使我删除了最后一个(字符串比较)...
,我也会收到此错误答案 0 :(得分:15)
您的id
似乎是VARCHAR
,其排名不同。
试试这个:
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'
答案 1 :(得分:5)
在临时表的声明中指定排序规则。
CREATE TABLE #TempTable (ID NVARCHAR(255) COLLATE database_default)
答案 2 :(得分:2)
问题是临时表。它使用tempdb的排序规则。
您可以在实际数据库中创建一个表而不是临时表,然后它们将具有相同的排序规则。或者在创建临时表时指定归类。
答案 3 :(得分:1)
试
SELECT * FROM my_table
INNER JOIN #TempTable temp
ON my_table.id = temp.id collate database_default
AND my_table.key = 'SOME STRING'