Wie kann ich feststellen, ob eine Spalte im Primärschlüssel der Tabelle ist? (SQL Server)
-
03-07-2019 - |
Frage
Ich bin derzeit mit ...
select Table_Name, Column_name, data_type, is_Nullable
from information_Schema.Columns
... für die Zwecke Informationen über Spalten in einer bestimmten Datenbank zu bestimmen, um einen Data Access-Layer zu erzeugen.
Von wo kann ich Informationen über abrufen, wenn diese Spalten sind die Teilnehmer in dem Primärschlüssel der Tabelle?
Lösung
Hier ist ein Weg (ersetzen ‚keycol‘ mit dem Spaltennamen Sie suchen für):
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';
Andere Tipps
In ähnlicher Weise wird die folgende geben Ihnen Informationen über alle Tabellen und ihre Schlüssel, statt Informationen zu bestimmten Spalten. Auf diese Weise können Sie sicherstellen, dass Sie alle Spalten von Interesse haben und wissen, was sie teilnehmen. Um alle Schlüssel, um zu sehen (primär, ausländische, einzigartig), kommentieren Sie die WHERE-Klausel.
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
Für Ihre Notwendigkeit, vollständige äußere Verknüpfung mit INFORMATION_SCHEMA.COLUMNS und INFORMATION_SCHEMA.KEY_COLUMN_USAGE. In der Select-Anweisung, fügen CONSTRAINT_NAME Spalte von INFORMATION_SCHEMA.KEY_COLUMN_USAGE, die Sie null oder keyname geben.
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 C.TABLE_NAME=@TABLENAME
Diese Abfrage Rückkehr Spalte mit Primärschlüssel ist.
SELECT col.COLUMN_NAME ,
col.DATA_TYPE ,
col.CHARACTER_MAXIMUM_LENGTH ln ,
CAST(ISNULL(j.is_primary, 0) AS BIT) is_primary
FROM INFORMATION_SCHEMA.COLUMNS col
LEFT JOIN ( SELECT K.TABLE_NAME ,
K.COLUMN_NAME ,
CASE WHEN K.CONSTRAINT_NAME IS NULL THEN 0
WHEN K.CONSTRAINT_NAME IS NOT NULL THEN 1
END is_primary
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 C.TABLE_NAME = 'tablename'
) j ON col.COLUMN_NAME = j.COLUMN_NAME
WHERE col.TABLE_NAME = 'tablename'