Come posso creare un vincolo univoco sulla mia colonna (SQL Server 2008 R2)?


108

Ho SQL Server 2008 R2 e desidero impostare una colonna univoca.

Sembra che ci siano due modi per farlo: "indice univoco" e "vincolo univoco". Non sono molto diversi da quello che ho capito, anche se il vincolo univoco è consigliato dalla maggior parte, perché ottieni anche un indice automaticamente.

Come creo un vincolo univoco?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

C'è un modo per creare un vincolo univoco tramite SQL Server Management Studio?

Risposte:


59

Per creare questi vincoli tramite la GUI è necessario il dialogo "indici e chiavi" non quello di controllo dei vincoli.

Ma nel tuo caso devi solo eseguire il pezzo di codice che hai già. Non ha affatto bisogno di essere inserito nel dialogo delle espressioni.


Quindi posso semplicemente eseguirlo in una query? Quando ho provato, ha funzionato con successo, ma c'è un posto dove posso andare a vederlo (cioè dove è stata modificata l'impostazione)?
White Island

@ WhiteIsland - Dovresti vederlo in Esplora oggetti SSMS se espandi la tabella e guardi sotto "Chiavi"
Martin Smith

126

Imposta la colonna come univoca in SQL Server dalla GUI:

Ti fanno davvero correre per la stalla per farlo con la GUI:

Assicurati che la tua colonna non violi il vincolo univoco prima di iniziare.

  1. Apri SQL Server Management Studio.
  2. Fare clic con il pulsante destro del mouse sulla tabella, fare clic su "Design".
  3. Fare clic con il pulsante destro del mouse sulla colonna che si desidera modificare, viene visualizzato un menu popup, fare clic su Indici / Chiavi.
  4. Fare clic sul pulsante "Aggiungi".
  5. Espandi la scheda "Generale".
  6. Assicurati di avere la colonna che desideri rendere unica selezionata nella casella "colonne".
  7. Modificare la casella "Tipo" in "Chiave univoca".
  8. Fare clic su "Chiudi".
  9. Vedi un piccolo asterisco nella finestra del file, questo significa che le modifiche non sono ancora state salvate.
  10. Premi Salva o premi Ctrl + s. Dovrebbe essere salvato e la tua colonna dovrebbe essere unica.

Oppure imposta la colonna come unica dalla finestra Query SQL:

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

Le modifiche hanno effetto immediato:

Command(s) completed successfully.

Grande. Inoltre puoi aggiungere più colonne nello script TSQL in questo modo: alter table your_table aggiungi vincolo pinky unique (yourcolumn, yourcolumn_2);
Jordan

15

Ecco un altro modo attraverso la GUI che fa esattamente ciò che fa il tuo script anche se passa attraverso gli indici (non i vincoli) in Esplora oggetti.

  1. Fare clic con il tasto destro su "Indici" e fare clic su "Nuovo indice ..." (nota: questo è disabilitato se la tabella è aperta in visualizzazione struttura)

inserisci qui la descrizione dell'immagine

  1. Assegna un nome al nuovo indice ("U_Name"), seleziona "Unique" e fai clic su "Aggiungi ..."

inserisci qui la descrizione dell'immagine

  1. Seleziona la colonna "Nome" nella finestra successiva

inserisci qui la descrizione dell'immagine

  1. Fare clic su OK in entrambe le finestre

1
In SSMS 2014, le opzioni del menu di scelta rapida per la creazione di un nuovo indice sono leggermente diverse dalle schermate precedenti. Quando si fa clic su Nuovo indice, è quindi necessario scegliere da un elenco di (Indice cluster, Indice non cluster, Indice XML primario, Indice XML secondario, Indice spaziale, Indice Columnstore non cluster e Indice Columnstore cluster). In genere, scegli un indice non cluster.
iCode

8

Una cosa non chiaramente coperta è che microsoft sql sta creando in background un indice univoco per il vincolo aggiunto

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

come puoi vedere, c'è un nuovo vincolo e un nuovo indice U_Name

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.