L'unicità può essere imposta con un vincolo unico.
Se l'indice univoco fa distinzione tra maiuscole e minuscole è definito dalle confrontazioni del server (o della tabella) .
Puoi ottenere le regole di confronto correnti del tuo database con questa query:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
e dovresti ottenere qualcosa come:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Qui, "CI_AS" alla fine delle regole di confronto significa:CI =senza distinzione tra maiuscole e minuscole, AS =sensibile all'accento.
Questo può essere cambiato in qualunque cosa tu abbia bisogno che sia. Se il tuo database e/o tabella hanno regole di confronto con distinzione tra maiuscole e minuscole, mi aspetto che anche l'unicità del tuo indice sia con distinzione tra maiuscole e minuscole, ad es. il tuo abcdef e ABCDEF dovrebbero essere entrambi accettabili come stringhe univoche.
Marco
AGGIORNAMENTO:
L'ho appena provato (SQL Server 2008 Developer Edition x64) - funziona per me (il mio database utilizza generalmente la "collation Latin1_General_CI_AS, ma posso definirne una diversa per tabella / anche per colonna 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
e torno:
string
ABC
abc
e nessun errore relativo alla violazione dell'indice univoco.