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". Ils ne diffèrent pas beaucoup de ce que je comprends, bien que la plupart des personnes recommandent une contrainte unique, car vous obtenez également un index automatiquement.
Comment créer une contrainte unique?
ALTER TABLE Customer ADD CONSTRAINT U_Name UNIQUE(Name)
Est-il possible de créer une contrainte unique via SQL Server Management Studio?
Pour créer ces contraintes à l'aide de l'interface graphique, vous avez besoin du dialogue "Index et clés" et non de celui des contraintes de vérification.
Mais dans votre cas, vous devez simplement exécuter le morceau de code que vous avez déjà. Il n'est pas du tout nécessaire d'entrer dans le dialogue d'expression.
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 unique avant de commencer.
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.
Voici un autre moyen d’utiliser l’interface graphique qui fait exactement ce que fait votre script même s’il passe par des index (et non des contraintes) dans l’explorateur d’objets.
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 constater, il existe une nouvelle contrainte et un nouvel index _Name