2009-01-27 5 views
32

Wie erstelle ich eine eindeutige Integritätsbedingung für ein Feld varchar, bei dem die Groß-/Kleinschreibung beachtet wird (SQL Server 2005)?T-SQL: Wie erstelle ich einen eindeutigen Schlüssel, bei dem die Groß-/Kleinschreibung beachtet wird?

Derzeit meine Einschränkung sieht wie folgt aus:

alter table MyTable 
add constraint UK_MyTable_MyUniqueKey unique nonclustered (MyCol) 

Wenn ich versuche, die beiden folgenden Werte einzufügen, habe ich eine „Verletzung der UNIQUE KEY-Einschränkung ...“ get Fehler.

insert into MyTable (MyCol) values ('ABC') 
insert into MyTable (MyCol) values ('abc') --causes a violation of UNIQUE KEY constraint 'UK_MyTable_MyUnqiueKey' 

Ich möchte die beiden unterschiedlich gefassten Werte als unqiue behandelt werden. Ich stelle mir vor, dass es den folgenden Code beinhaltet, aber ich weiß nicht, wie es meine add constraint Syntax ändert.

COLLATE SQL_Latin1_General_CP1_CS_AS 
+0

meinst du fall 'empfindlich' oder unempfindlich? wenn ABC und abc beide gleich gelöst sind, dann ist das ein Fall 'in' empfindlicher Vergleich. Sie könnten die Frage – keithwarren7

+0

ja wiederholen - Sie sind richtig. Danke – Seibar

Antwort

40

Groß- und Kleinschreibung Dies wird die Spalte ändern zu sein. Ich glaube nicht, dass es eine Änderung Ihrer Einschränkung ...

ALTER TABLE mytable 
ALTER COLUMN mycolumn VARCHAR(10) 
COLLATE SQL_Latin1_General_CP1_CS_AS 

Irgendwelche wählt oder schließt sich in dieser Spalte wird Groß- und Kleinschreibung als Ergebnis dieser Operation werden.

+0

Wird dies dazu führen, dass alle Selects in dieser Spalte auch die Groß-/Kleinschreibung beachten? – Seibar

+7

Bei allen an dieser Spalte beteiligten Personen wird zwischen Groß- und Kleinschreibung unterschieden. –

+4

Sie müssen die Einschränkung fallen lassen, den ALTER ausführen, den PK erneut hinzufügen, um mit der Abhängigkeit umzugehen. – gbn

4

Sie können nur die Groß- und Kleinschreibung der Daten in der Datenbank festlegen (kleinste Granularität der Spalte). Sie können nicht die Groß- und Kleinschreibung eines Indexes festlegen - das wäre äquivalent zur Indizierung eines Ausdrucks, was in einigen Datenbanken, aber nicht in SQL Server möglich ist.

Verwandte Themen