Problème :
Vous voulez trouver les noms des contraintes dans une table dans SQL Server.
Exemple :
On veut afficher les noms des contraintes dans le tableau student
.
Solution :
SELECT TABLE_NAME, CONSTRAINT_TYPE,CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME=’student’;
Voici le résultat :
TABLE_NAME | CONSTRAINT_TYPE | CONSTRAINT_NAME |
---|---|---|
étudiant | CLÉ PRIMAIRE | PK__étudiant__3213E83F357C7D1D |
étudiant | UNIQUE | UQ__étudiant__24E2EDD2AC2A7D87 |
étudiant | VÉRIFIER | CK__student__age__4E88ABD4 |
étudiant | CLÉ ÉTRANGÈRE | FK__student__country__4F7CD00D |
Discussion :
Utilisez la vue table_constraints
dans le information_schema
schéma. La colonne table_name
vous donne le nom de la table dans laquelle la contrainte est définie, et la colonne constraint_name
contient le nom de la contrainte. La colonne constraint_type
indique le type de contrainte :PRIMARY KEY
pour le type de clé primaire, FOREIGN KEY
pour le type de clé étrangère, UNIQUE
pour les valeurs uniques, et CHECK
pour la vérification des contraintes.
Par exemple, la clé primaire dans le student
la table porte le nom de contrainte PK_student_3213E83F357C7D1D
. Le constraint_type
colonne vous donne des informations sur le type de chaque contrainte ; pour la clé primaire, c'est PRIMARY KEY
. Le table_name
colonne de cette vue indique quelle table contient cette contrainte.
Cependant, si vous souhaitez sélectionner le DEFAULT
contrainte d'une base de données, utilisez cette requête ci-dessous.
SELECT c.name, c.definition FROM sys.default_constraints c JOIN sys.objects o ON o.object_id = c.parent_object_id WHERE o.name ='student';
Voici le résultat :
nom | définition |
---|---|
DF__student__name__4D94879B | ("inconnu") |
Le nom du DEFAULT
la contrainte est stockée dans le nom de la colonne, mais la valeur est dans la colonne definition
. Joindre les vues sys.default_constraint
s et sys.objects
permet de ne sélectionner que les données d'une table donnée (dans notre exemple, la table student
) en utilisant la clause WHERE. Le nom de la contrainte contient le nom de la table (student
) et le nom de la colonne (name
).