Comparer deux colonnes nvarchar avec du text Unicode dans SQL Server 2012

Dans MS SQL Server 2012, je veux comparer deux colonnes avec le type de données nvarchar qui contiennent du text Unicode.

La requête suivante ne renvoie rien, même si les valeurs sont différentes.

DECLARE @TABLE TABLE( A nvarchar(100), B nvarchar(100) ); INSERT INTO @TABLE VALUES (N'A²', N'A2') SELECT * FROM @TABLE WHERE A <> B; 

J'ai essayé avec le collation binary et cela fonctionne:

 DECLARE @TABLE TABLE( A nvarchar(100), B nvarchar(100) ); INSERT INTO @TABLE VALUES (N'A²', N'A2'); SELECT * FROM @TABLE WHERE A COLLATE Latin1_General_BIN = B COLLATE Latin1_General_BIN; 

Y a-t-il une autre option ou est-ce possible seulement avec la collation?

Y a-t-il une autre option ou est-ce possible seulement avec la collation?

Oui c'est, par exemple HASHBYTES :

 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); 

LiveDemo

Sortie:

 ╔════╦════╗ ║ A ║ B ║ ╠════╬════╣ ║ A² ║ A2 ║ ╚════╩════╝ 

Quoi qu'il en soit, la solution de collation est la plus propre.

Une autre option est:

 SELECT * FROM @TABLE WHERE CAST(A AS VARBINARY(MAX))<>CAST(B AS VARBINARY(MAX)); 

Qui imprime la ligne dans le tableau