Comment créer une contrainte unique sur ma colonne (SQL Server 2008 R2)?

108

J'ai SQL Server 2008 R2 et je souhaite définir une colonne unique.

Il semble y avoir deux façons de procéder: "index unique" et "contrainte unique". Ils ne sont pas très différents de ce que je comprends, bien qu'une contrainte unique soit recommandée par la plupart, car vous obtenez également un index automatiquement.

Comment créer une contrainte unique?

ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)

Existe-t-il un moyen de créer une contrainte unique via SQL Server Management Studio?

Île blanche
la source

Réponses:

59

Pour créer ces contraintes via l'interface graphique, vous avez besoin de la boîte de dialogue «index et clés» et non celle de vérification des contraintes.

Mais dans votre cas, il vous suffit d'exécuter le morceau de code que vous avez déjà. Il n'a pas du tout besoin d'être entré dans le dialogue d'expression.

Martin Smith
la source
Je peux donc l'exécuter dans une requête? Quand j'ai essayé, cela a fonctionné avec succès, mais y a-t-il un endroit où je peux aller voir cela (c'est-à-dire où le paramètre a-t-il été modifié)?
White Island
@WhiteIsland - Vous devriez le voir dans l'explorateur d'objets SSMS si vous développez le tableau et regardez sous "Clés"
Martin Smith
126

Définissez la colonne comme unique dans SQL Server à partir de l'interface graphique:

Ils vous font vraiment courir autour de la grange pour le faire avec l'interface graphique:

Assurez-vous que votre colonne ne viole pas la contrainte d'unicité avant de commencer.

  1. Ouvrez SQL Server Management Studio.
  2. Faites un clic droit sur votre table, cliquez sur "Conception".
  3. Faites un clic droit sur la colonne que vous souhaitez modifier, un menu contextuel apparaît, cliquez sur Index / Clés.
  4. Cliquez sur le bouton "Ajouter".
  5. Développez l'onglet "Général".
  6. Assurez-vous que la colonne que vous souhaitez rendre unique est sélectionnée dans la zone "Colonnes".
  7. Remplacez la case "Type" par "Clé unique".
  8. Cliquez sur "Fermer".
  9. Vous voyez un petit astérisque dans la fenêtre du fichier, cela signifie que les modifications ne sont pas encore enregistrées.
  10. Appuyez sur Enregistrer ou appuyez sur Ctrl + s. Il doit enregistrer et votre colonne doit être unique.

Ou définissez la colonne comme unique dans la fenêtre Requête SQL:

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

Les modifications prennent effet immédiatement:

Command(s) completed successfully.
Eric Leschinski
la source
Génial. Vous pouvez également ajouter plusieurs colonnes dans le script TSQL comme ceci: alter table your_table add constraint pinky unique (yourcolumn, yourcolumn_2);
Jordan
15

Voici une autre façon d'utiliser l'interface graphique qui fait exactement ce que fait votre script même s'il passe par des index (pas des contraintes) dans l'explorateur d'objets.

  1. Faites un clic droit sur "Index" et cliquez sur "Nouvel Index ..." (note: ceci est désactivé si vous avez la table ouverte en mode Création)

entrez la description de l'image ici

  1. Donnez un nom au nouvel index ("U_Name"), cochez "Unique" et cliquez sur "Ajouter ..."

entrez la description de l'image ici

  1. Sélectionnez la colonne "Nom" dans la fenêtre suivante

entrez la description de l'image ici

  1. Cliquez sur OK dans les deux fenêtres
Tony L.
la source
1
Dans SSMS 2014, les options du menu contextuel du clic droit pour créer un nouvel index sont légèrement différentes des captures d'écran ci-dessus. Lorsque vous cliquez sur Nouvel index, vous devez ensuite choisir dans une liste de (Index clusterisé, Index non groupé, Index XML principal, Index XML secondaire, Index spatial, Index Columnstore non groupé et Index Columnstore Clustered). En règle générale, vous choisirez un index non clusterisé.
iCode le
8

Une chose qui n'est pas clairement couverte est que Microsoft SQL crée en arrière-plan un index unique pour la contrainte ajoutée

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

comme vous pouvez le voir, il y a une nouvelle contrainte et un nouvel index U_Name

detzu
la source