126 votes

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

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

Il semble y avoir deux façons de procéder : "index unique" et "contrainte unique". Elles ne sont pas très différentes d'après ce que j'ai compris, bien que la contrainte unique soit recommandée par la plupart des gens, parce que vous obtenez aussi 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 le SQL Server Management Studio ?

169voto

Eric Leschinski Points 14289

Définir 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 tableau, puis cliquez sur "Design".
  3. Cliquez avec le bouton droit de la souris sur la colonne que vous voulez modifier, un menu contextuel apparaît, cliquez sur Indexes/Keys.
  4. Cliquez sur le bouton "Ajouter".
  5. Développez l'onglet "Général".
  6. Assurez-vous que la colonne que vous voulez rendre unique est sélectionnée dans la case "colonnes".
  7. Changez la case "Type" en "Clé unique".
  8. Cliquez sur "Fermer".
  9. Vous voyez un petit astérisque dans la fenêtre du fichier, cela signifie que les changements ne sont pas encore enregistrés.
  10. Appuyez sur Enregistrer ou sur Ctrl+s. La sauvegarde devrait être effectuée, et votre colonne devrait être unique.

Ou définissez la colonne comme unique à partir de la fenêtre de requête SQL :

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

Les changements prennent effet immédiatement :

Command(s) completed successfully.

0 votes

Super. Aussi vous pouvez ajouter plusieurs colonnes dans le script TSQL comme ceci : alter table your_table add constraint pinky unique(yourcolumn, yourcolumn_2) ;

0 votes

C'est quoi "pinky" ? Peu importe, c'est le nom que vous donnez à cette contrainte apparemment.

1 votes

Tu me fais sentir vieux, petit. Pinky est un nom de famille variable : youtube.com/watch?v=qzZmU0aGmcc Saisissez l'occasion, un jour vous serez vous aussi une personne âgée.

64voto

Martin Smith Points 174101

Pour créer ces contraintes par le biais de l'interface graphique, vous avez besoin du dialogue "index et clés" et non de celui des contraintes de contrôle.

Mais dans votre cas, vous avez juste besoin d'exécuter le morceau de code que vous avez déjà. Il n'est pas du tout nécessaire de le saisir dans le dialogue d'expression.

0 votes

Donc je peux juste l'exécuter dans une requête ? Lorsque j'ai essayé, il s'est exécuté avec succès, mais y a-t-il un endroit où je peux aller pour le voir (c'est-à-dire où le paramètre a été modifié) ?

0 votes

@WhiteIsland - Vous devriez le voir dans l'explorateur d'objets SSMS si vous développez la table et regardez sous "Keys".

20voto

Tony Points 23

Voici un autre moyen à travers l'interface graphique qui fait exactement ce que votre script fait même s'il passe par les index (et non les contraintes) dans l'explorateur d'objets.

  1. Cliquez avec le bouton droit de la souris sur "Indexes" et cliquez sur "New Index..." (note : ceci est désactivé si la table est ouverte dans le design). désactivé si vous avez la table ouverte en vue design)

enter image description here

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

enter image description here

  1. Sélectionnez la colonne "Nom" dans le menu déroulant suivant.

enter image description here

  1. Cliquez sur OK dans les deux Windows

1 votes

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 New Index, vous devez ensuite choisir dans une liste de (Clustered Index, Non-Clustered Index, Primary XML Index, Secondary XML Index, Spatial Index, Non-Clustered Columnstore Index, et Clustered Columnstore Index). En général, vous choisirez Index non clusterisé.

8voto

detzu Points 566

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

2voto

koniecpolski Points 11

Lorsque vous êtes dans une Design de votre tableau, cliquez sur la colonne de votre choix et développez la vue Designer de table dans la barre d'outils supérieure. Sélectionnez l'onglet Indices/clés option.~

Table Designer tool tab

Ensuite, ajoutez une nouvelle contrainte, choisissez la colonne de droite et définissez son type comme suit Clé unique et lui donner un nom. Et c'est tout ! ^^ Creating unique constraint

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X