Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2008 e comparação de caracteres Unicode


Ok, então um pouco mais de escavação mostra que isso é quase certamente devido ao caractere mais recente, já que isso também funciona com os equivalentes do sql server 2008 de agrupamento latino, mas não com as versões mais antigas, ou seja, funciona com Latin1_General_100_CI_AS , mas não com Latin1_General_CI_AS . Para obter uma lista completa dos agrupamentos que comparam corretamente essas strings, usei:
IF OBJECT_ID('Tempdb..#T') IS NOT NULL
    DROP TABLE #T;
IF OBJECT_ID('Tempdb..#V') IS NOT NULL
    DROP TABLE #V;

CREATE TABLE #V (A NVARCHAR(50), B NVARCHAR(50));
INSERT #V (A, B) VALUES (N'it᧠', N'it');

CREATE TABLE #T (Collation VARCHAR(500), Match BIT);

DECLARE @SQL NVARCHAR(MAX) = (SELECT N'INSERT #T (Collation, Match) 
                                        SELECT ''' + Name + ''', CASE WHEN A = B COLLATE ' + name + ' THEN 1 ELSE 0 END
                                        FROM    #V;'
                                FROM sys.fn_helpcollations()
                                FOR XML PATH(''), TYPE
                            ).value('.', 'NVARCHAR(MAX)');

EXECUTE sp_executesql @SQL;

SELECT  *
FROM    #T
WHERE   Match = 0;