我想过滤'电子邮件'上的记录,我的查询是这样的。
SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer)
它给了我以下错误
无法解决排序规则冲突 在“SQL_Latin1_General_CP1_CI_AS”之间 和“Latin1_General_CI_AS”中的 等于操作。
如果有相等的运算符(=)而不是IN,我可以使用整理。但是在这里使用Collate会给我语法错误。
SELECT * FROM #temp WHERE email NOT IN (从客户中选择电子邮件)整理 SQL_Latin1_General_CP1_CI_AS
我该如何解决这个问题。我不能删除并重新创建表,因为它是实时数据库。
#temp表中的数据来自SQL Server 2000,而Customer表位于SQL Server 2005中
感谢。
答案 0 :(得分:19)
...
NOT IN (SELECT email COLLATE SQL_Latin1_General_CP1_CI_AS AS email FROM Customer)
collate位基本上跟在列名之后。
或者这(取决于你想要的那个):
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...
强制转换为默认设置。