我想过滤“电子邮件”上的记录,我的查询如下。
SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer)
它给了我以下错误
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.
如果有等号运算符 (=) 而不是 IN,我可以使用 collate。但在这里使用 Collate 会出现语法错误。
SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer) collate SQL_Latin1_General_CP1_CI_AS
我该如何解决这个问题。我无法删除并重新创建表,因为它是实时数据库。
#temp 表中的数据来自 SQL Server 2000,Customer 表来自 SQL Server 2005
谢谢。
最佳答案
...
NOT IN (SELECT email COLLATE SQL_Latin1_General_CP1_CI_AS AS email FROM Customer)
基本上,整理位位于列名称之后。
或者这个(这取决于你想要哪一个):
SELECT * FROM #temp WHERE email collate SQL_Latin1_General_CP1_CI_AS NOT IN (SELECT email FROM Customer)
最后,如果您的数据库是 SQL_Latin1_General_CP1_CI_AS,则一种选择是使用 ...COLLATE Database_Default...
强制使用默认设置。
关于sql-server - 如何使用 IN 运算符整理 SQL_Latin1_General_CP1_CI_AS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2004363/