У меня есть таблица с уникальным ключом, который включает NVARCHAR(50)
столбец (правильно или нет, но есть). Таким образом, при попытке вставить Șc
или C
(не имеет значения порядок вставки) он прерывается на 2-й вставке из-за проблем с сопоставлением. Вот ошибка:
(Затронуты 1 строка) Сообщение 2601, уровень 14, состояние 1, строка 16 Невозможно вставить строку дубликата ключа в объект "dbo.testT" с уникальным индексом "IX_TestT". Значение дубликата ключа (C).
Выберите возврат:
База данных по умолчанию сортировки Latin1_General_CI_AS
. Потратил некоторое время на поиски решения, не слишком меняя существующую структуру, но не мог найти способ начать работу. Перепробовал разные сопоставления и комбинации, все не получается. Читайте ( здесь и здесь ) о расширениях персонажей и так далее, все еще застрял. Вот пример кода, который я использую для репликации проблемы, не стесняйтесь изменять и рекомендовать все, что может помочь решить эту проблему.
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;