Det unika kan upprätthållas med en unik begränsning.
Huruvida det unika indexet är skiftlägeskänsligt eller inte definieras av serverns (eller tabellens) sortering .
Du kan få den aktuella sorteringen av din databas med denna fråga:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
och du borde få något som:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Här betyder "CI_AS" i slutet av sorteringen:CI =Skiftlägesokänslig, AS =Accentkänslig.
Detta kan ändras till vad du vill att det ska vara. Om din databas och/eller tabell har en skiftlägeskänslig kollation, skulle jag förvänta mig att unikheten i ditt index också kommer att vara skiftlägeskänslig, t.ex. din abcdef och ABCDEF bör vara både acceptabla som unika strängar.
Marc
UPPDATERING:
Jag har precis provat detta (SQL Server 2008 Developer Edition x64) - fungerar för mig (min databas använder vanligtvis "Latin1_General_CI_AS-sorteringen, men jag kan definiera en annan per tabell / per VARCHAR-kolumn till och med):
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
och jag får tillbaka:
string
ABC
abc
och inget fel om att det unika indexet har brutits.