如何使用IN运算符整理SQL_Latin1_General_CP1_CI_AS

Kas*_*hif 10 t-sql sql-server sql-server-2005

我想过滤'电子邮件'上的记录我的查询是这样的.

SELECT * FROM #temp WHERE email NOT IN (SELECT email FROM Customer)
Run Code Online (Sandbox Code Playgroud)

它给了我以下错误

在等于操作中无法解决"SQL_Latin1_General_CP1_CI_AS"和"Latin1_General_CI_AS"之间的排序规则冲突.

如果有相等的运算符(=)而不是IN,我可以使用整理.但是在这里使用Collat​​e会给我语法错误.

SELECT*FROM #temp WHERE email NOT IN(SELECT FROM FROM FROM Customer)整理SQL_Latin1_General_CP1_CI_AS

我该如何解决这个问题.我不能删除并重新创建表,因为它是实时数据库.

#temp表中的数据来自SQL Server 2000,而Customer表位于SQL Server 2005中

谢谢.

gbn*_*gbn 19

...
NOT IN (SELECT email COLLATE SQL_Latin1_General_CP1_CI_AS AS email FROM Customer)
Run Code Online (Sandbox Code Playgroud)

基本上,collat​​e位遵循列名.

或者这(这取决于你想要的那个):

SELECT * FROM #temp WHERE email collate SQL_Latin1_General_CP1_CI_AS NOT IN (SELECT email FROM Customer) 
Run Code Online (Sandbox Code Playgroud)

最后,如果您的数据库是SQL_Latin1_General_CP1_CI_AS,则可以使用一个选项...COLLATE Database_Default...来强制设置为默认设置.