Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save PiotrFerenc/fade29623818cfd93fe4bff725feb9eb to your computer and use it in GitHub Desktop.
Save PiotrFerenc/fade29623818cfd93fe4bff725feb9eb to your computer and use it in GitHub Desktop.
SELECT
c.TABLE_SCHEMA,
c.TABLE_NAME,
c.COLUMN_NAME,
c.DATA_TYPE,
c.IS_NULLABLE,
CASE
WHEN pk.COLUMN_NAME IS NOT NULL THEN 'YES'
ELSE 'NO'
END AS IS_PRIMARY_KEY,
CASE
WHEN fk.COLUMN_NAME IS NOT NULL THEN 'YES'
ELSE 'NO'
END AS IS_FOREIGN_KEY,
fk.REFERENCED_TABLE_NAME,
fk.REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.COLUMNS c
LEFT JOIN (
SELECT
ku.TABLE_SCHEMA,
ku.TABLE_NAME,
ku.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE ku
ON tc.CONSTRAINT_NAME = ku.CONSTRAINT_NAME
WHERE
tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
) pk
ON c.TABLE_SCHEMA = pk.TABLE_SCHEMA
AND c.TABLE_NAME = pk.TABLE_NAME
AND c.COLUMN_NAME = pk.COLUMN_NAME
LEFT JOIN (
SELECT
cu.TABLE_SCHEMA,
cu.TABLE_NAME,
cu.COLUMN_NAME,
ku.TABLE_NAME AS REFERENCED_TABLE_NAME,
ku.COLUMN_NAME AS REFERENCED_COLUMN_NAME,
rc.CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ku
ON rc.UNIQUE_CONSTRAINT_NAME = ku.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu
ON rc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME
) fk
ON c.TABLE_SCHEMA = fk.TABLE_SCHEMA
AND c.TABLE_NAME = fk.TABLE_NAME
AND c.COLUMN_NAME = fk.COLUMN_NAME
ORDER BY
c.TABLE_SCHEMA, c.TABLE_NAME, c.ORDINAL_POSITION;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment