Wie kann ich eine eindeutige Einschränkung für meine Spalte erstellen (SQL Server 2008 R2)?

107

Ich habe SQL Server 2008 R2 und möchte eine eindeutige Spalte festlegen.

Es scheint zwei Möglichkeiten zu geben, dies zu tun: "eindeutiger Index" und "eindeutige Einschränkung". Sie unterscheiden sich nicht wesentlich von dem, was ich verstehe, obwohl die meisten eine eindeutige Einschränkung empfehlen, da Sie auch automatisch einen Index erhalten.

Wie erstelle ich eine eindeutige Einschränkung?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Gibt es eine Möglichkeit, eine eindeutige Einschränkung über SQL Server Management Studio zu erstellen?

Weiße Insel
quelle

Antworten:

59

Um diese Einschränkungen über die GUI zu erstellen, benötigen Sie den Dialog "Indizes und Schlüssel" und nicht die Option "Einschränkungen überprüfen".

In Ihrem Fall müssen Sie jedoch nur den Code ausführen, den Sie bereits haben. Es muss überhaupt nicht in den Ausdrucksdialog eingegeben werden.

Martin Smith
quelle
Also kann ich es einfach in einer Abfrage ausführen? Als ich es versuchte, lief es erfolgreich, aber kann ich das überall sehen (dh wo wurde die Einstellung geändert)?
White Island
@WhiteIsland - Sie sollten es im SSMS-Objekt-Explorer sehen, wenn Sie die Tabelle erweitern und unter "Schlüssel"
Martin Smith
125

Legen Sie die Spalte in SQL Server über die GUI als eindeutig fest:

Sie bringen dich wirklich dazu, durch die Scheune zu rennen, um es mit der GUI zu tun:

Stellen Sie sicher, dass Ihre Spalte nicht gegen die eindeutige Einschränkung verstößt, bevor Sie beginnen.

  1. Öffnen Sie SQL Server Management Studio.
  2. Klicken Sie mit der rechten Maustaste auf Ihre Tabelle und klicken Sie auf "Design".
  3. Klicken Sie mit der rechten Maustaste auf die Spalte, die Sie bearbeiten möchten. Ein Popup-Menü wird angezeigt. Klicken Sie auf Indizes / Schlüssel.
  4. Klicken Sie auf die Schaltfläche "Hinzufügen".
  5. Erweitern Sie die Registerkarte "Allgemein".
  6. Stellen Sie sicher, dass Sie die Spalte, die Sie eindeutig machen möchten, im Feld "Spalten" ausgewählt haben.
  7. Ändern Sie das Feld "Typ" in "Eindeutiger Schlüssel".
  8. Klicken Sie auf "Schließen".
  9. Im Dateifenster wird ein kleines Sternchen angezeigt. Dies bedeutet, dass die Änderungen noch nicht gespeichert wurden.
  10. Drücken Sie Speichern oder drücken Sie Strg + s. Es sollte gespeichert werden und Ihre Spalte sollte eindeutig sein.

Oder legen Sie die Spalte im SQL-Abfragefenster als eindeutig fest:

alter table location_key drop constraint pinky;
alter table your_table add constraint pinky unique(yourcolumn);

Änderungen werden sofort wirksam:

Command(s) completed successfully.
Eric Leschinski
quelle
Toll. Sie können dem TSQL-Skript auch mehrere Spalten hinzufügen: Ändern Sie die Tabelle your_table. Fügen Sie die Einschränkung pinky unique (yourcolumn, yourcolumn_2) hinzu.
Jordanien
15

Hier ist ein weiterer Weg durch die GUI, der genau das tut, was Ihr Skript tut, obwohl es Indizes (nicht Einschränkungen) im Objekt-Explorer durchläuft.

  1. Klicken Sie mit der rechten Maustaste auf "Indizes" und klicken Sie auf "Neuer Index ..." (Hinweis: Dies ist deaktiviert, wenn Sie die Tabelle in der Entwurfsansicht geöffnet haben.)

Geben Sie hier die Bildbeschreibung ein

  1. Geben Sie dem neuen Index einen Namen ("U_Name"), aktivieren Sie "Eindeutig" und klicken Sie auf "Hinzufügen ...".

Geben Sie hier die Bildbeschreibung ein

  1. Wählen Sie im nächsten Fenster die Spalte "Name"

Geben Sie hier die Bildbeschreibung ein

  1. Klicken Sie in beiden Fenstern auf OK
Tony L.
quelle
1
In SSMS 2014 unterscheiden sich die Kontextmenüoptionen mit der rechten Maustaste zum Erstellen eines neuen Index geringfügig von den obigen Screenshots. Wenn Sie auf Neuer Index klicken, müssen Sie aus einer Liste auswählen (Clustered-Index, Nicht-Clustered-Index, Primärer XML-Index, Sekundärer XML-Index, Raumindex, Nicht-Clustered-Columnstore-Index und Clustered-Columnstore-Index). Normalerweise wählen Sie Nicht-Clustered-Index.
iCode
8

Eine Sache, die nicht klar behandelt wird, ist, dass Microsoft SQL im Hintergrund einen eindeutigen Index für die hinzugefügte Einschränkung erstellt

create table Customer ( id int primary key identity (1,1) , name nvarchar(128) ) 

--Commands completed successfully.

sp_help Customer

---> index
--index_name    index_description   index_keys
--PK__Customer__3213E83FCC4A1DFA    clustered, unique, primary key located on PRIMARY   id

---> constraint
--constraint_type   constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
--PRIMARY KEY (clustered)   PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id


---- now adding the unique constraint

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

-- Commands completed successfully.

sp_help Customer

---> index
---index_name   index_description   index_keys
---PK__Customer__3213E83FCC4A1DFA   clustered, unique, primary key located on PRIMARY   id
---U_Name   nonclustered, unique, unique key located on PRIMARY name

---> constraint
---constraint_type  constraint_name delete_action   update_action   status_enabled  status_for_replication  constraint_keys
---PRIMARY KEY (clustered)  PK__Customer__3213E83FCC4A1DFA  (n/a)   (n/a)   (n/a)   (n/a)   id
---UNIQUE (non-clustered)   U_Name  (n/a)   (n/a)   (n/a)   (n/a)   name

Wie Sie sehen können, gibt es eine neue Einschränkung und einen neuen Index U_Name

Detzu
quelle