Det unikke kan håndhæves med en unik begrænsning.
Hvorvidt det unikke indeks er forskel på store og små bogstaver eller ej, er defineret af serverens (eller tabellens) sortering .
Du kan få den aktuelle samling af din database med denne forespørgsel:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
og du burde få noget som:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Her betyder "CI_AS" i slutningen af sorteringen:CI =Case Insensitive, AS =Accentsensitive.
Dette kan ændres til hvad du har brug for. Hvis din database og/eller tabel alligevel har en versalfølsom kollation, vil jeg forvente, at det unikke ved dit indeks også vil være case-sensitive, f.eks. din abcdef og ABCDEF bør både være acceptable som unikke strenge.
Marc
OPDATERING:
Jeg har lige prøvet dette (SQL Server 2008 Developer Edition x64) - virker for mig (min database bruger generelt "Latin1_General_CI_AS-sorteringen, men jeg kan selv definere en anden pr. tabel / pr. VARCHAR-kolonne):
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
og jeg vender tilbage:
string
ABC
abc
og ingen fejl om, at det unikke indeks er blevet overtrådt.