使用SQL server 2012中的Unicode文本比较两个nvarchar列

使用SQL server 2012中的Unicode文本比较两个nvarchar列,sql,sql-server,tsql,sql-server-2012,collation,Sql,Sql Server,Tsql,Sql Server 2012,Collation,在MS SQL Server 2012中,我想比较两个数据类型为nvarchar的列,它们包含Unicode文本 即使值不同,下面的查询也不会返回任何结果 DECLARE @TABLE TABLE( A nvarchar(100), B nvarchar(100) ); INSERT INTO @TABLE VALUES (N'A²', N'A2') SELECT * FROM @TABLE WHERE A <> B; 是否有其他选项,或者只能通过排序规则来完

在MS SQL Server 2012中,我想比较两个数据类型为nvarchar的列,它们包含Unicode文本

即使值不同,下面的查询也不会返回任何结果

DECLARE @TABLE TABLE(
    A nvarchar(100),
    B nvarchar(100)
);

INSERT INTO @TABLE VALUES (N'A²', N'A2')

SELECT *
FROM @TABLE 
WHERE A <> B;
是否有其他选项,或者只能通过排序规则来完成

是否有其他选项,或者只能通过排序规则来完成

是的,例如:

无论如何,排序规则解决方案是最干净的解决方案。

另一个选项是:

SELECT
  *
FROM
  @TABLE 
WHERE 
  CAST(A AS VARBINARY(MAX))<>CAST(B AS VARBINARY(MAX));
选择
*
从…起
@桌子
哪里
CAST(A为VARBINARY(MAX))CAST(B为VARBINARY(MAX));

如果打印出表中的一行,则需要使用不同的排序规则,因为即使值A2和a^2的校验和也是相同的,排序规则也可以工作,比较也可以。你说我需要使用不同的排序规则是什么意思?
DECLARE @TABLE TABLE(A nvarchar(100),B nvarchar(100));
INSERT INTO @TABLE VALUES (N'A²', N'A2')

SELECT *
FROM @TABLE 
WHERE HASHBYTES('SHA2_256',A) <> HASHBYTES('SHA2_256',B);
╔════╦════╗
║ A  ║ B  ║
╠════╬════╣
║ A² ║ A2 ║
╚════╩════╝
SELECT
  *
FROM
  @TABLE 
WHERE 
  CAST(A AS VARBINARY(MAX))<>CAST(B AS VARBINARY(MAX));