Bir NVARCHAR(50)
sütun (doğru ya da değil, ama orada) içeren benzersiz bir anahtar içeren bir tablo var. Bu nedenle, ekleme yapmaya çalışırken Șc
veya C
( eklemenin sırası önemli değil) harmanlama sorunları nedeniyle 2. ekte kırılır. İşte hata:
(Etkilenen 1 satır) Msg 2601, Seviye 14, Durum 1, Satır 16 'dbo.testT' nesnesine benzersiz dizin 'IX_TestT' ile çift anahtar satır eklenemiyor. Yinelenen anahtar değeri (C) 'dir.
İade seçin:
Veritabanı varsayılan harmanlama olduğunu Latin1_General_CI_AS
. Mevcut yapıyı çok fazla değiştirmeden, nasıl çözüleceğine bakmak için biraz zaman harcadık, ancak çalışmaya başlamanın bir yolunu bulamıyorum. Farklı harmanlama ve kombinasyonlar denedim, her şey başarısız. Karakter genişletmeleri ve benzerleri hakkında ( burada ve burada ) okuyun , hala sıkışmış. İşte sorunu çoğaltmak, değiştirmek ve bunu çözmeye yardımcı olabilecek bir şey tavsiye çekinmeyin için kullandığım örnek bir kod.
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;