sql-server - 如何使用 IN 运算符整理 SQL_Latin1_General_CP1_CI_AS

标签 sql-server sql-server-2005 tsql

我想过滤“电子邮件”上的记录,我的查询如下。

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,我可以使用 collat​​e。但在这里使用 Collat​​e 会出现语法错误。

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/

相关文章:

sql - 如何从 SQL Server 表中检索特定行?

sql-server - T-SQL 查询显示表定义?

sql-server-2005 - 如何使用T-SQL正确连接列?

sql - 如何计算 SQL Server 中的第 90 个百分位数

sql - 如何快速比较多个字符串?

sql - 我可以在同一个表上有两个不同的插入触发器吗?

sql-server - 聚合函数返回 null

sql - 选择 IN() 列表中未找到的内容

sql-server - Sql server 2008 service broker 百万队列

sql-server - SQL Server 触发器问题