Tính duy nhất có thể được thực thi bằng một ràng buộc duy nhất.
Việc chỉ mục duy nhất có phân biệt chữ hoa chữ thường hay không là do đối chiếu của máy chủ (hoặc bảng) xác định .
Bạn có thể nhận được đối chiếu hiện tại của cơ sở dữ liệu của mình với truy vấn này:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
và bạn sẽ nhận được một cái gì đó như:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Ở đây, "CI_AS" ở cuối đối chiếu có nghĩa là:CI =Phân biệt chữ hoa chữ thường, AS =Phân biệt dấu.
Điều này có thể được thay đổi thành bất cứ điều gì bạn cần. Nếu cơ sở dữ liệu và / hoặc bảng của bạn có đối chiếu phân biệt chữ hoa chữ thường, tôi hy vọng rằng tính duy nhất của chỉ mục của bạn cũng sẽ phân biệt chữ hoa chữ thường, ví dụ: abcdef của bạn và ABCDEF cả hai đều phải được chấp nhận dưới dạng các chuỗi duy nhất.
Marc
CẬP NHẬT:
Tôi vừa thử cái này (SQL Server 2008 Developer Edition x64) - phù hợp với tôi (cơ sở dữ liệu của tôi thường sử dụng đối chiếu "Latin1_General_CI_AS, nhưng tôi có thể xác định một cái khác cho mỗi bảng / mỗi cột VARCHAR):
CREATE TABLE TestUnique
(string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS)
CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string)
INSERT INTO dbo.TestUnique(string) VALUES ('abc')
INSERT INTO dbo.TestUnique(string) VALUES ('ABC')
SELECT * FROM dbo.TestUnique
và tôi nhận lại:
string
ABC
abc
và không có lỗi về chỉ mục duy nhất bị vi phạm.