2009-10-03 6 views
20

Gibt es eine Möglichkeit, eine Spalte sowohl EINZIGARTIG als auch Groß-/Kleinschreibung zu berücksichtigen?SQL Server 2008 Eindeutige Spalte, die Groß- und Kleinschreibung beachtet

Ich möchte in der Lage sein

abcde und ABCDE

in einer eindeutigen Spalte zu setzen.

+11

@Mitch: vielleicht ist er mit Fall # 10 konfrontiert :-) Sie wissen nie .... –

+0

Einfach gesagt, ich will mehr Optionen. Ich erwarte, dass die Tabelle wirklich sehr groß wird, also 62 statt 36 Zeichen. Abc ... ABC ... 123 ... Außerdem verwendet das Feld nur 5 Zeichen. –

+0

Dieser Beitrag ist grundsätzlich zu einem anderen Beitrag kostenlos http://StackOverflow.com/Questions/1513911/most-efficient-way-to-unique-random-string –

Antwort

29

Die Eindeutigkeit kann mit einer eindeutigen Einschränkung erzwungen werden.

Ob der eindeutige Index zwischen Groß- und Kleinschreibung unterscheidet, wird vom Server (oder der Tabelle) Kollation definiert.

Sie können die aktuelle Zusammenstellung der Datenbank mit dieser Abfrage erhalten:

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation; 

und Sie sollten so etwas wie erhalten:

SQLCollation 
———————————— 
SQL_Latin1_General_CP1_CI_AS 

Hier die „CI_AS“ am Ende des Vergleichs bedeutet: CI = Case Insensitive, AS = Akzent-sensitiv.

Dies kann geändert werden, was auch immer Sie benötigen. Wenn Ihre Datenbank und/oder Tabelle eine Sortierung unter Berücksichtigung der Groß-/Kleinschreibung erfordert, würde ich erwarten, dass die Eindeutigkeit Ihres Indexes auch die Groß- und Kleinschreibung berücksichtigt, z. Ihre abcdef und ABCDEF sollten beide als eindeutige Zeichenfolgen akzeptabel sein.

Marc

UPDATE:

ich diesen gerade versucht (SQL Server 2008 Developer Edition x64) - funktioniert für mich (meine Datenbank ist die „Latin1_General_CI_AS Sortierungs im Allgemeinen, aber ich kann ein anderes pro definieren Tabelle/pro VARCHAR Spalte selbst):

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 zurück:

string 
ABC 
abc 

und kein Fehler bei der Verletzung des eindeutigen Indexes.

+1

Ich habe versucht, die Skripte von Marc aufgeführt und es funktionierte gut für mich, auf SQL Server 2008, 32bit. – RBarryYoung

+0

Es scheint, dass es keine Möglichkeit gibt, dies pro Tabelle in der Benutzeroberfläche zu tun. Es kann jedoch während der Datenbankerstellung für die gesamte Datenbank getan werden, was etwas zu weit reichend erscheint. –

0

Ich musste Daten aus einer Groß-und Kleinschreibung Datenbank importieren. Als ich versuchte, den Primärschlüssel auf die Spalte zu setzen, die der Primärschlüssel auf der Quelle ist, konnte ich dies wegen doppelter Schlüssel nicht tun. Ich änderte die Kollatierung für die Spalte (varchar) in Groß- und Kleinschreibung (Rechtsklick auf die Tabelle, wählen Sie Design, markieren Sie die Spalte, die Sie ändern möchten und klicken Sie auf die Elipsis in Collation) und jetzt funktioniert es gut. (SQL Server 2008 R2 64 Bit).

+1

Ein Down-Vote ohne Erklärung. Nobel. – bvj

+0

Willkommen im SO-Universum. – cbmeeks

3

Im Fall, dass jemand es für eine vorhandene Tabelle tun muss, die bereits eine unique key/index definiert auf einer varchar/ Spalte hat, hier ist das Skript.

0

Dank @Devraj Gaddavi für die Schritt für Schritt, wie dies genau das ist, was ich auch tun musste. Ich war dabei, diese Skripte zu erstellen, aber dann (mit SSMS 2008R2) erreichte ich dasselbe auf eine eher faule Art :-).In der Baumansicht habe ich meine Tabelle und Spalte gefunden und dann mit der rechten Maustaste auf die Spalte geklickt, in der ich die Kollatierung ändern wollte, und 'Ändern' gewählt. Im angezeigten Fenster habe ich die Kollatierung in den Eigenschaften in die Groß- und Kleinschreibung geändert, dann irgendwo im offenen Bereich im oberen Bereich des Fensters (wo die Spalten in Tabellenform aufgelistet sind), mit der rechten Maustaste geklickt und "Change Script ändern" gewählt ... "

Verwandte Themen