在 SQL Server 2012 中,当搜索 where a column name ='C CANTU '
时,它会返回相关列 = 的行'C CANTU'
。
这是与 collation SQL_Latin1_General_CP850_BIN2
。
在 SQL Server 2005 中,这两个值不相等,并且不会返回这些行。
SQL Server 2012 中是否有此设置?它们是nvarchar
列。相同的脚本针对每个运行。我们正在努力尝试升级并因此发现最终结果不一致。
在 SQL Server 2012 中,当搜索 where a column name ='C CANTU '
时,它会返回相关列 = 的行'C CANTU'
。
这是与 collation SQL_Latin1_General_CP850_BIN2
。
在 SQL Server 2005 中,这两个值不相等,并且不会返回这些行。
SQL Server 2012 中是否有此设置?它们是nvarchar
列。相同的脚本针对每个运行。我们正在努力尝试升级并因此发现最终结果不一致。
基本上正在发生的事情是使用额外的尾随空格调整列以使长度匹配。几个解决方法:
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