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'
Beachten Sie, dass eine Tabelle mehrere eindeutige Einschränkungen aufweisen, die jeweils mit mehreren Spalten. Sie müssen einige zusätzliche Logik anwenden, um die richtige auszuwählen.
UPDATE - basierend auf anderen Kommentare ...
Die obige Abfrage alle UNIQUE
Schlüsseleinschränkungen finden. Es werden jedoch PRIMARY KEY
Constraints oder UNIQUE
Indizes nicht gefunden, die außerhalb einer UNIQUE
Schlüsselabhängigkeit erstellt wurden.
Um den Primärschlüssel, ersetzen Sie die letzte Zeile mit zu finden:
and TC.CONSTRAINT_TYPE = 'PRIMARY KEY'
dies ist in hohem Maße abhängig von der Datenbank, die Sie verwenden. Welche Datenbank verwendest du? –
@Xavier - solange es keine eingebettete DB ist, unterstützen die meisten jetzt das ANSI 'information_schema' – Donnie
Es ist auch vollkommen akzeptabel, mehr als einen eindeutigen Schlüssel auf einer Tabelle zu haben ... Ich nehme an, du meinst Primärschlüssel, obwohl das kann eine Zusammensetzung aus mehreren Spalten sein –