2

在 SQL Server 2012 中,当搜索 where a column name ='C CANTU '时,它会返回相关列 = 的行'C CANTU'

这是与 collat​​ion SQL_Latin1_General_CP850_BIN2

在 SQL Server 2005 中,这两个值不相等,并且不会返回这些行。

SQL Server 2012 中是否有此设置?它们是nvarchar列。相同的脚本针对每个运行。我们正在努力尝试升级并因此发现最终结果不一致。

4

1 回答 1

0

基本上正在发生的事情是使用额外的尾随空格调整列以使长度匹配。几个解决方法:

DECLARE @p NVARCHAR(255) = N'C CANTU ';

SELECT col FROM dbo.table 
WHERE col LIKE LEFT(@p,1) + '%' AND col + 'x' = @p + 'x'; -- will seek

SELECT col FROM dbo.table 
WHERE col = @p
AND DATALENGTH(col) = DATALENGTH(@p); -- will seek (and add a filter)

请注意,这LEN()将忽略尾随空格,但DATALENGTH()不会。

正如我在评论中提到的,我强烈建议您更正您在不使用前缀nvarchar的情况下将列与字符串文字进行比较时遇到的任何查询。N

于 2013-09-10T20:38:34.567 回答