Tôi có một bảng với một khóa duy nhất bao gồm một NVARCHAR(50)
cột (đúng hay không, nhưng có). Vì vậy, khi cố gắng chèn Șc
hoặc C
(không quan trọng thứ tự chèn), nó bị hỏng ở lần chèn thứ 2 do các vấn đề đối chiếu. Đây là lỗi:
(1 hàng bị ảnh hưởng) Msg 2601, Cấp 14, Trạng thái 1, Dòng 16 Không thể chèn hàng khóa trùng lặp trong đối tượng 'dbo.testT' với chỉ mục duy nhất 'IX_TestT'. Giá trị khóa trùng lặp là (C).
Chọn trả về:
Đối chiếu cơ sở dữ liệu mặc định là Latin1_General_CI_AS
. Dành thời gian để tìm cách giải quyết nó, mà không thay đổi quá nhiều cấu trúc đã có, nhưng không thể tìm ra cách để làm việc. Đã thử các bộ sưu tập và kết hợp khác nhau, mọi thứ đều thất bại. Đọc ( ở đây và ở đây ) về mở rộng nhân vật và như vậy, vẫn còn bị mắc kẹt. Đây là một mã mẫu mà tôi đang sử dụng để tái tạo vấn đề, vui lòng sửa đổi và đề xuất bất cứ điều gì có thể giúp giải quyết vấn đề này.
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;