比较SQL server中不区分大小写的两列

比较SQL server中不区分大小写的两列,sql,sql-server,compare,varchar,case-insensitive,Sql,Sql Server,Compare,Varchar,Case Insensitive,我有一个SQL select,它在一个表中为AAA,在另一个表中为AAA的列的一部分中有一个联接。我想加入而不考虑案例。但它不会返回正确答案(我希望在此选择过程中返回所有记录) 我在选择后添加了将拉丁文1\u General\u CS\u校对为,但没有正确答案。 我将两列的排序规则都设置为Deafolt database collation,但没有答案 请提供帮助我想您应该使用COLLATE SQL\u Latin1\u General\u CP1\u CI\u AS。CI是不确定的 selec

我有一个SQL select,它在一个表中为AAA,在另一个表中为AAA的列的一部分中有一个联接。我想加入而不考虑案例。但它不会返回正确答案(我希望在此选择过程中返回所有记录)

我在选择后添加了将拉丁文1\u General\u CS\u校对为,但没有正确答案。 我将两列的排序规则都设置为Deafolt database collation,但没有答案


请提供帮助

我想您应该使用COLLATE SQL\u Latin1\u General\u CP1\u CI\u AS。CI是不确定的

select *
from t1
join t2 ON t1.Col1 COLLATE SQL_Latin1_General_CP1_CI_AS = t2.Col2 COLLATE SQL_Latin1_General_CP1_CI_AS

如果您正在显示的代码没有返回您期望的行,那么问题不仅仅在于字母大小写。字符串中可能有无法打印的字符或其他字符,或者您正在查看错误的表,或者存在其他问题。使用带有不区分大小写的排序规则(包含“CI”)的
lower
COLLATE
,两者都可以工作。如果它们不起作用,那是另外一回事。

您能为这两列显示一些示例数据吗?因为在两列上应用
LOWER()
函数实际上应该可以工作。@Rahul:forexp:表1中的“METRO”应该与表2中的“METRO”匹配。我也测试了上面的函数。你只需要一个COLLATE子句,而不是两个。等号一侧的表达式后面的单个COLLATE将控制比较。我猜,并在另一个系统中运行了查询,但对于同一个数据库,可能是因为SQLServer实例中的某些设置,可能吗?你是对的,我的问题是SQL实例设置。
select *
from t1
join t2 ON t1.Col1 COLLATE SQL_Latin1_General_CP1_CI_AS = t2.Col2 COLLATE SQL_Latin1_General_CP1_CI_AS