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'
Tenete a mente che una tabella può avere più vincoli univoci, ognuna delle quali contiene più colonne. Sarà necessario applicare qualche logica aggiuntiva per selezionare quella giusta.
UPDATE - sulla base di altri commenti ...
La query sopra troverà tutti UNIQUE
vincoli di chiave. Tuttavia, non troverà i vincoli PRIMARY KEY
o gli indici UNIQUE
creati all'esterno di un vincolo di chiave UNIQUE
.
Per trovare la chiave primaria, sostituire l'ultima riga con:
and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
fonte
2010-07-05 14:54:57
questo è altamente dipendente del database utilizzato. Quale database usi? –
@Xavier - purché non sia un DB incorporato, la maggior parte ora supporta ANSI 'information_schema' – Donnie
È anche perfettamente accettabile avere più di una chiave unica su una tabella ... Presumo che tu intenda la chiave primaria, anche se può essere un composto di più colonne –