Comment créer une contrainte unique sur une table existante dans SQL Server 2005?
Je recherche à la fois le TSQL et comment le faire dans le diagramme de base de données.
Comment créer une contrainte unique sur une table existante dans SQL Server 2005?
Je recherche à la fois le TSQL et comment le faire dans le diagramme de base de données.
Réponses:
La commande SQL est:
ALTER TABLE <tablename> ADD CONSTRAINT
<constraintname> UNIQUE NONCLUSTERED
(
<columnname>
)
Voir la syntaxe complète ici .
Si vous souhaitez le faire à partir d'un diagramme de base de données:
Dans SQL Server Management Studio Express:
Avertissement: une seule ligne nulle peut figurer dans la colonne que vous avez définie comme étant unique.
Vous pouvez le faire avec un index filtré dans SQL 2008:
CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;
Voir La valeur du champ doit être unique sauf si elle est NULL pour une plage de réponses.
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
<namingconventionconstraint> UNIQUE NONCLUSTERED
(
<columnname>
) ON [PRIMARY]
J'ai également trouvé que vous pouvez le faire via les diagrammes de base de données.
En faisant un clic droit sur le tableau et en sélectionnant Index / Clés ...
Cliquez sur le bouton «Ajouter» et changez les colonnes en colonne (s) que vous souhaitez rendre uniques.
Le changement est unique à Oui.
Cliquez sur fermer et enregistrez le diagramme, et il l'ajoutera au tableau.
Vous recherchez quelque chose comme ce qui suit
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b
Pour créer une contrainte UNIQUE sur une ou plusieurs colonnes lorsque la table est déjà créée, utilisez le SQL suivant:
ALTER TABLE TableName ADd UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)
Pour autoriser la dénomination d'une contrainte UNIQUE pour la requête ci-dessus
ALTER TABLE TableName ADD CONSTRAINT un_constaint_name UNIQUE (ColumnName1,ColumnName2, ColumnName3, ...)
La requête prise en charge par MySQL / SQL Server / Oracle / MS Access.
UNIQUE NONCLUSTERED
et les options PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
?
Dans certaines situations, il peut être souhaitable de s'assurer que la clé unique n'existe pas avant de la créer. Dans de tels cas, le script ci-dessous peut vous aider:
IF Exists(SELECT * FROM sys.indexes WHERE name Like '<index_name>')
ALTER TABLE dbo.<target_table_name> DROP CONSTRAINT <index_name>
GO
ALTER TABLE dbo.<target_table_name> ADD CONSTRAINT <index_name> UNIQUE NONCLUSTERED (<col_1>, <col_2>, ..., <col_n>)
GO