Unikatowość można wymusić za pomocą ograniczenia niepowtarzalności.
To, czy w unikalnym indeksie jest rozróżniana wielkość liter, określa porównanie serwera (lub tabeli). .
Możesz uzyskać bieżące sortowanie bazy danych za pomocą tego zapytania:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
i powinieneś otrzymać coś takiego:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Tutaj „CI_AS” na końcu sortowania oznacza:CI =bez uwzględniania wielkości liter, AS =z uwzględnieniem akcentów.
Można to zmienić na to, czego potrzebujesz. Jeśli twoja baza danych i/lub tabela ma sortowanie z uwzględnieniem wielkości liter, spodziewam się, że unikatowość twojego indeksu również będzie uwzględniać wielkość liter, np. Twój abcdef i ABCDEF powinny być akceptowalne jako unikalne ciągi.
Marek
AKTUALIZACJA:
Właśnie tego spróbowałem (SQL Server 2008 Developer Edition x64) - działa dla mnie (moja baza danych generalnie używa sortowania "Latin1_General_CI_AS, ale mogę zdefiniować inne na tabelę / na kolumnę 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
i wracam:
string
ABC
abc
i żadnych błędów dotyczących naruszenia unikalnego indeksu.