SQL Server 2005 Comment créer une contrainte unique?


181

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:


272

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:

  • faites un clic droit sur la table et sélectionnez 'Index / Clés'
  • cliquez sur le bouton Ajouter pour ajouter un nouvel index
  • entrez les informations nécessaires dans les propriétés sur le côté droit:
    • les colonnes souhaitées (cliquez sur le bouton points de suspension pour sélectionner)
    • définir Est unique sur Oui
    • donnez-lui un nom approprié

1
Cela fonctionne ... mais ... pourquoi la contrainte est affichée dans le dossier INDEX au lieu du dossier CONSTRAINTS. Il est affiché avec une autre icône, mais de toute façon il devrait être dans le dossier des contraintes.
Fernando Torres

84

Dans SQL Server Management Studio Express:

  • Cliquez avec le bouton droit sur la table, choisissez Modifier ou Conception (pour les versions ultérieures)
  • Cliquez avec le bouton droit sur le champ, choisissez Index / Clés ...
  • Cliquez sur Ajouter
  • Pour Colonnes , sélectionnez le nom de champ que vous souhaitez rendre unique.
  • Pour Type , choisissez Unique Key .
  • Cliquez sur Fermer , enregistrez la table.

29
ALTER TABLE [TableName] ADD CONSTRAINT  [constraintName] UNIQUE ([columns])

15

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.


comment faites-vous cela dans SQL Server 2005?
Maxrunner

2
Ce n'est pas réalisable dans le serveur SQL 2005. Je recommande fortement la mise à niveau vers un SGBDR plus à jour - il ne sera officiellement plus pris en charge à partir du 12 avril 2016.
reedstonefood

13
ALTER TABLE dbo.<tablename> ADD CONSTRAINT
            <namingconventionconstraint> UNIQUE NONCLUSTERED
    (
                <columnname>
    ) ON [PRIMARY]

10

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.


8

Vous recherchez quelque chose comme ce qui suit

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
UNIQUE column_b

Documents MSDN


6

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 ?
Kiquenet

5

Dans le diagramme du studio de gestion, choisissez la table, faites un clic droit pour ajouter une nouvelle colonne si vous le souhaitez, faites un clic droit sur la colonne et choisissez "Vérifier les contraintes", vous pouvez en ajouter une.


0

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.