it-swarm.com.de

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

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?

90
White Island

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

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.

50
Martin Smith

Stellen Sie die Spalte in SQL Server über die GUI als eindeutig ein:

Sie lassen Sie wirklich durch die Scheune rennen, um es mit der GUI zu tun:

Stellen Sie sicher, dass Ihre Spalte die eindeutige Einschränkung nicht verletzt, bevor Sie beginnen.

  1. Öffnen Sie SQL Server Management Studio.
  2. Klicken Sie mit der rechten Maustaste auf Ihre Tabelle und klicken Sie auf "Entwurf".
  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. Sie sehen ein kleines Sternchen im Dateifenster. Das bedeutet, dass die Änderungen noch nicht gespeichert wurden.
  10. Drücken Sie Speichern oder drücken Sie Strg + s. Es sollte speichern 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.
105
Eric Leschinski

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.)

enter image description here

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

enter image description here

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

enter image description here

  1. Klicken Sie in beiden Fenstern auf OK
14
Tony L.

Unklar 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, gibt es eine neue Einschränkung und einen neuen Index _Name

8
detzu