Sql server 2008 r2 没有LTRIM、RTRIM和上/下功能的记录不匹配

Sql server 2008 r2 没有LTRIM、RTRIM和上/下功能的记录不匹配,sql-server-2008-r2,collation,Sql Server 2008 R2,Collation,这是我长期以来面临的问题。我在不同的数据库中有两个表,它们具有相同的列和完全相同的数据类型。但是,当执行联接或任何其他匹配查询时,我只得到很少的结果,我注意到 LTRIM(RTRIM(UPPER(SourceTable.Column))) = LTRIM(RTRIM(UPPER(DestinationTable.Column))) 它很好用。我很惊讶地说,我在bit和integer列上看到了相同的问题,当我保留LTRIM、RTRIM和UPPER/LOWER时,它们也可以很好地工作 以下是两个

这是我长期以来面临的问题。我在不同的数据库中有两个表,它们具有相同的列和完全相同的数据类型。但是,当执行联接或任何其他匹配查询时,我只得到很少的结果,我注意到

LTRIM(RTRIM(UPPER(SourceTable.Column))) =
LTRIM(RTRIM(UPPER(DestinationTable.Column))) 
它很好用。我很惊讶地说,我在bit和integer列上看到了相同的问题,当我保留LTRIM、RTRIM和UPPER/LOWER时,它们也可以很好地工作

以下是两个数据库的排序规则:

Source: SQL_Latin1_General_CP1_CI_AS
Destination: SQL_Latin1_General_CP1_CI_AS

正如你所看到的,即使我得到了这个问题,它们也有相同的排序规则。我可以有一个永久性的解决方案吗?

如果数据类型完全相同,可能是您实际上对列有不同的排序规则-您实际上可以对数据库有不同的排序规则,在列级别指定。我的第一个目的是检查一下

,引述:

列级排序规则

When you create or alter a table, you can specify collations for each 
character-string column by using the COLLATE clause. If no collation is 
specified, the column is assigned the default collation of the database.

嗯,您确定只有在使用LTRIM/RTRIM/UPPER时才能成功地加入BIT/INT列吗?这听起来不太对(尽管我相信你在本专栏的观点)。你能澄清什么是“完全相同的数据类型”吗?我们是在谈论char、varchar、nvarchar等吗。?长度完全一样吗?你有没有按照@AdaTheDev在回答中的建议检查过列级排序规则?@Aaron对于整数和位,我发现在1-3000条记录中,它遗漏了大约20-30条记录,但当我保留LTRIM和RTRIM时,它会给出准确的结果。最重要的是:它确实发生了3/10次,如果它经常发生,那么我可以确定原因。。我完全搞不清原因,因为我认为bit和integer不应该要求ltrim和rtrim。您可以发布这两个表的确切表模式和您的查询吗?您还可以解释一下您在哪里运行这些查询吗?关于bit/integer遇到相同问题的内容让我相信您正在使用导致问题的工具。我通过从目标表创建“create table”脚本并在源数据库上执行脚本来创建这些表。当我创建脚本时,该列上没有标记排序规则,这使我相信它采用了数据库排序规则。@Zerotoinfinite,但您可以检查它,而不是仅仅相信它。