Die Eindeutigkeit kann mit einer Unique-Einschränkung erzwungen werden.
Ob beim eindeutigen Index zwischen Groß- und Kleinschreibung unterschieden wird oder nicht, wird durch die Sortierung des Servers (oder der Tabelle) definiert .
Sie können die aktuelle Sortierung Ihrer Datenbank mit dieser Abfrage abrufen:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
und Sie sollten so etwas wie:
erhaltenSQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
Hier bedeutet das "CI_AS" am Ende der Sortierung:CI =Case Insensitive, AS =Accent sensitive.
Dies kann so geändert werden, wie Sie es benötigen. Wenn Ihre Datenbank und/oder Tabelle eine Sortierung mit Unterscheidung zwischen Groß- und Kleinschreibung hat, würde ich erwarten, dass die Eindeutigkeit Ihres Index auch zwischen Groß- und Kleinschreibung unterscheidet, z. Ihr abcdef und ABCDEF sollten sowohl als eindeutige Zeichenfolgen akzeptabel sein.
Markus
UPDATE:
Ich habe das gerade ausprobiert (SQL Server 2008 Developer Edition x64) - funktioniert bei mir (meine Datenbank verwendet im Allgemeinen die Sortierung "Latin1_General_CI_AS", aber ich kann sogar eine andere pro Tabelle / pro VARCHAR-Spalte definieren):
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
und ich bekomme zurück:
string
ABC
abc
und kein Fehler, dass der eindeutige Index verletzt wird.