15

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

4 回答 4

19

似乎您idVARCHARs 具有不同的排序规则。

尝试这个:

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'
于 2009-09-10T12:11:48.463 回答
5

在临时表的声明中指定排序规则。

CREATE TABLE #TempTable (ID NVARCHAR(255) COLLATE database_default)
于 2009-09-10T12:12:09.350 回答
2

问题是临时表。它使用 tempdb 的排序规则。

您可以在实际数据库中创建一个表而不是临时表,然后它们将具有相同的排序规则。或者在创建临时表时指定排序规则。

于 2009-09-10T12:12:24.893 回答
1

尝试

SELECT * FROM my_table
INNER JOIN #TempTable temp    
    ON my_table.id = temp.id collate database_default
    AND my_table.key = 'SOME STRING'
于 2009-09-10T12:17:48.280 回答