У мене є таблиця з унікальним ключем, що містить NVARCHAR(50)
стовпчик (правильний чи ні, але чи є). Отже, при спробі вставити Șc
або C
(не має значення порядок вставки) він перерветься на 2-й вставці через проблеми зіставлення. Ось помилка:
(1 ряд (и) зачіпають) Msg 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;