web-dev-qa-db-fra.com

Obtenir la liste des colonnes de contraintes uniques (en SQL)?

Je peux obtenir une liste de contraintes uniques assez facilement avec la requête suivante:

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE'

Mais comment obtenir une liste des colonnes auxquelles s'applique chaque contrainte unique?

35
anakic

Voir INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

29
Ed Harper

Ed est correct, les colonnes sont exposées sur la vue d'utilisation des colonnes de contraintes, voici le SQL pour cela.

select TC.Constraint_Name, CC.Column_Name from information_schema.table_constraints TC
inner join information_schema.constraint_column_usage CC on TC.Constraint_Name = CC.Constraint_Name
where TC.constraint_type = 'Unique'
order by TC.Constraint_Name
46
Andrew
SELECT *
FROM    sys.indexes i
        JOIN sys.index_columns ic
            ON i.index_id = ic.index_id
               AND i.object_id = ic.object_id
WHERE i.is_unique_constraint = 1;
4
Kenny Evitt

Juste pour référence aux utilisateurs de mySQL, la même chose peut être obtenue avec les requêtes ci-dessous:

Pour rechercher une contrainte unique sur une table

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='UNIQUE' and table_name='db_my_table'

Pour rechercher une liste de colonnes unique avec toutes les colonnes

select * from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'

pour trouver une liste de colonnes unique avec la vue requise

select CONSTRAINT_NAME,COLUMN_NAME,TABLE_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGE where CONSTRAINT_NAME='cons_name' and TABLE_NAME='db_my_table'
0
Sanjay Jain