Antwort

30

ist hier ein Weg (ersetzen ‚keycol‘ mit dem Spaltennamen Sie für die Suche):

SELECT K.TABLE_NAME, 
K.COLUMN_NAME, 
K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
AND K.COLUMN_NAME = 'keycol'; 
+0

Sie sollten auch den Tabellennamen von Interesse in Ihrer WHERE-Klausel haben. Andernfalls, wenn es eine andere Tabelle mit einem Primärschlüssel gibt, der den gleichen Spaltennamen wie der Primärschlüssel der Tabelle hat, an der Sie interessiert sind, erhalten Sie das Ergebnis. – Markus

6

Auch die folgenden erhalten Sie Informationen über alle Tabellen und ihre Schlüssel, statt Informationen zu bestimmten Spalten. Auf diese Weise stellen Sie sicher, dass Sie alle relevanten Spalten haben und wissen, woran sie beteiligt sind. Um alle Schlüssel (primär, fremd, eindeutig) anzuzeigen, müssen Sie die WHERE-Klausel kommentieren.

SELECT K.TABLE_NAME, C.CONSTRAINT_TYPE, K.COLUMN_NAME, K.CONSTRAINT_NAME 
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS C 
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS K 
ON C.TABLE_NAME = K.TABLE_NAME 
AND C.CONSTRAINT_CATALOG = K.CONSTRAINT_CATALOG 
AND C.CONSTRAINT_SCHEMA = K.CONSTRAINT_SCHEMA 
AND C.CONSTRAINT_NAME = K.CONSTRAINT_NAME 
WHERE C.CONSTRAINT_TYPE = 'PRIMARY KEY' 
ORDER BY K.TABLE_NAME, C.CONSTRAINT_TYPE, K.CONSTRAINT_NAME 
3

für Ihre Notwendigkeit, kommen voll Außen mit INFORMATION_SCHEMA.COLUMNS und INFORMATION_SCHEMA.KEY_COLUMN_USAGE. Fügen Sie an der Anweisung select die Spalte CONSTRAINT_NAME aus INFORMATION_SCHEMA.KEY_COLUMN_USAGE hinzu, die Ihnen den Wert null oder keyname gibt.

select C.Table_Name, C.Column_name, data_type, is_Nullable, U.CONSTRAINT_NAME 
from information_Schema.Columns C FULL OUTER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE U ON C.COLUMN_NAME = U.COLUMN_NAME 
WHERE [email protected] 
+0

Große Antwort, aber Sie sollten TABLE_NAME auch in der WHERE-Klausel hinzufügen, um sicherzustellen, dass PK aus der richtigen Tabelle abgerufen wird. Andernfalls wird PK aller Tabellen geladen, während PK-Feldnamen für mehrere Tabellen während der vollständigen äußeren Verknüpfung identisch sind. –