select CCU.CONSTRAINT_NAME, CCU.COLUMN_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS as TC
inner join INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as CCU
on TC.CONSTRAINT_CATALOG = CCU.CONSTRAINT_CATALOG
and TC.CONSTRAINT_SCHEMA = CCU.CONSTRAINT_SCHEMA
and TC.CONSTRAINT_NAME = CCU.CONSTRAINT_NAME
where TC.CONSTRAINT_CATALOG = 'MyCatalogName'
and TC.CONSTRAINT_SCHEMA = 'MySchemaName'
and TC.TABLE_NAME = 'MyTableName'
and TC.CONSTRAINT_TYPE = 'UNIQUE'
Gardez à l'esprit qu'une table peut avoir de multiples contraintes uniques, chacune contenant plusieurs colonnes. Vous devrez appliquer une logique supplémentaire pour sélectionner la bonne.
MISE À JOUR - basé sur d'autres commentaires ...
La requête ci-dessus trouverez toutes les principales contraintes UNIQUE
. Toutefois, il ne trouvera pas les contraintes PRIMARY KEY
ou les index UNIQUE
créés en dehors d'une contrainte de clé UNIQUE
.
Pour trouver la clé primaire, remplacer la dernière ligne avec:
and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
cela dépend fortement de la base de données que vous utilisez. Quelle base de données utilisez-vous? –
@Xavier - tant que ce n'est pas une base de données embarquée, la plupart supportent maintenant la norme ANSI 'information_schema' – Donnie
Il est également parfaitement acceptable d'avoir plus d'une clé unique sur une table ... Je suppose que vous voulez dire clé primaire, bien que peut être un composite de plusieurs colonnes –