Ich habe eine Tabelle mit einem eindeutigen Schlüssel, der eine NVARCHAR(50)
Spalte enthält (richtig oder nicht, aber vorhanden). Wenn Sie also versuchen, einzufügen Șc
oder C
(unabhängig von der Reihenfolge der Einfügung), wird die 2. Einfügung aufgrund von Sortierproblemen unterbrochen. Hier ist der Fehler:
(1 Zeile (n) betroffen) Meldung 2601, Ebene 14, Status 1, Zeile 16 Es kann keine doppelte Schlüsselzeile in das Objekt 'dbo.testT' mit dem eindeutigen Index 'IX_TestT' eingefügt werden. Der doppelte Schlüsselwert ist (C).
Rückgabe auswählen:
Die Standardkollatierung der Datenbank lautet Latin1_General_CI_AS
. Ich habe einige Zeit damit verbracht, nach Lösungen zu suchen, ohne die bereits vorhandene Struktur zu stark zu verändern, kann aber keinen Weg finden, um an die Arbeit zu gehen. Versucht verschiedene Kollatierungen und Kombinationen, alles schlägt fehl. Lesen Sie ( hier und hier ) über Charaktererweiterungen und so weiter. Hier ist ein Beispielcode, mit dem ich das Problem repliziere. Sie können ihn jederzeit ändern und empfehlen, um dieses Problem zu beheben.
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;