Saya punya tabel dengan kunci unik yang menyertakan NVARCHAR(50)
kolom (benar atau tidak, tetapi ada di sana). Jadi, ketika mencoba memasukkan Șc
atau C
(tidak masalah urutan memasukkan) itu rusak pada sisipan ke-2 karena masalah pemeriksaan. Inilah kesalahannya:
(1 baris terpengaruh) Msg 2601, Level 14, Negara 1, Baris 16 Tidak dapat memasukkan baris kunci duplikat di objek 'dbo.testT' dengan indeks unik 'IX_TestT'. Nilai kunci duplikat adalah (C).
Pilih pengembalian:
Database default collation adalah Latin1_General_CI_AS
. Menghabiskan waktu mencari cara untuk menyelesaikannya, tanpa mengubah terlalu banyak struktur yang sudah ada, tetapi tidak dapat menemukan cara untuk mulai bekerja. Mencoba berbagai susunan dan kombinasi, semuanya gagal. Baca (di sini dan di sini ) tentang ekspansi karakter dan sebagainya, masih macet. Berikut adalah contoh kode yang saya gunakan untuk mereplikasi masalah, jangan ragu untuk memodifikasi dan merekomendasikan apa pun yang dapat membantu menyelesaikan masalah ini.
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;