如何使用IN运算符整理SQL_Latin1_General_CP1_CI_AS

时间:2010-01-05 05:36:40

标签: sql-server sql-server-2005 tsql

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

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

它给了我以下错误

  

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

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

  

SELECT * FROM #temp WHERE email NOT IN   (从客户中选择电子邮件)整理   SQL_Latin1_General_CP1_CI_AS

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

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

感谢。

1 个答案:

答案 0 :(得分:19)

...
NOT IN (SELECT email COLLATE SQL_Latin1_General_CP1_CI_AS AS email FROM Customer)

collat​​e位基本上跟在列名之后。

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

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...强制转换为默认设置。