Ho una tabella con una chiave univoca che include una NVARCHAR(50)
colonna (corretta o no, ma c'è). Quindi, quando si tenta di inserire Șc
o C
(non importa l'ordine dell'inserto) si rompe sul secondo inserto a causa di problemi di confronto. Ecco l'errore:
(1 riga (e) interessata) Messaggio 2601, Livello 14, Stato 1, Riga 16 Impossibile inserire la riga chiave duplicata nell'oggetto 'dbo.testT' con indice univoco 'IX_TestT'. Il valore della chiave duplicata è (C).
Seleziona resi:
Fascicolazione predefinita del database è Latin1_General_CI_AS
. Trascorso del tempo a cercare come risolverlo, senza cambiare troppo la struttura già esistente, ma non riesco a trovare un modo per farlo funzionare. Ho provato diverse raccolte e combinazioni, tutto fallisce. Leggi ( qui e qui ) le espansioni dei personaggi e così via, ancora bloccato. Ecco un codice di esempio che sto usando per replicare il problema, sentiti libero di modificare e raccomandare qualsiasi cosa possa aiutare a risolvere questo problema.
CREATE TABLE testT (
[Default_Collation] [NVARCHAR] (50) COLLATE DATABASE_DEFAULT,
[Latin1_General_CI_AS] [NVARCHAR] (50) COLLATE Latin1_General_CI_AS,
[Latin1_General_CI_AI] [NVARCHAR] (50) COLLATE Latin1_General_CI_AI,
[SQL_Collation] [NVARCHAR] (50) COLLATE SQL_Latin1_General_CP1_CI_AS);
CREATE UNIQUE CLUSTERED INDEX [IX_TestT] ON [dbo].[testT] ([Default_Collation])
ON [PRIMARY]
GO
INSERT INTO testT
SELECT N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc' --COLLATE Latin1_General_CI_AS
INSERT INTO testT
SELECT N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE SQL_Latin1_General_CP1_CI_AS
SELECT * FROM testT;
DROP TABLE testT;