与临时表中的列进行比较时,SQL排序规则发生冲突

时间:2009-09-10 12:04:25

标签: sql collation

我有一个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.

我该如何解决这个问题? (不对数据库进行更改)

更新:即使我删除了最后一个(字符串比较)...

,我也会收到此错误

4 个答案:

答案 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'