Mam tabelę z unikalnym kluczem zawierającym NVARCHAR(50)
kolumnę (poprawną lub nie, ale tam jest). Tak więc podczas próby wstawienia Șc
lub C
(bez względu na kolejność wstawiania) łamie się na 2. wkładce z powodu problemów z sortowaniem. Oto błąd:
(Dotyczy 1 wierszy) Msg 2601, poziom 14, stan 1, wiersz 16 Nie można wstawić zduplikowanego wiersza klucza w obiekcie „dbo.testT” z unikalnym indeksem „IX_TestT”. Zduplikowana wartość klucza to (C).
Wybierz zwroty:
Domyślne sortowanie bazy danych to Latin1_General_CI_AS
. Spędziłem trochę czasu, zastanawiając się, jak go rozwiązać, nie zmieniając zbytnio już istniejącej struktury, ale nie mogę znaleźć sposobu na rozpoczęcie pracy. Próbowałem różnych zestawień i kombinacji, wszystko się nie udaje. Przeczytaj ( tutaj i tutaj ) o rozszerzeniach postaci i tak dalej, nadal utknął. Oto przykładowy kod, którego używam do replikacji problemu, możesz go zmodyfikować i polecić wszystko, co mogłoby pomóc w rozwiązaniu tego problemu.
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;