Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save PiotrFerenc/fc3aff9c1e3d217fba476444e75777f0 to your computer and use it in GitHub Desktop.
Save PiotrFerenc/fc3aff9c1e3d217fba476444e75777f0 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,
CASE
WHEN ix.COLUMN_NAME IS NOT NULL THEN 'YES'
ELSE 'NO'
END AS IS_INDEXED
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
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
LEFT JOIN (
SELECT
t.name AS TABLE_NAME,
SCHEMA_NAME(t.schema_id) AS TABLE_SCHEMA,
col.name AS COLUMN_NAME
FROM
sys.indexes i
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
INNER JOIN sys.columns col ON ic.object_id = col.object_id AND ic.column_id = col.column_id
INNER JOIN sys.tables t ON i.object_id = t.object_id
WHERE
i.is_primary_key = 0 -- opcjonalnie: pomijamy PK, bo i tak są zidentyfikowane osobno
) ix
ON c.TABLE_SCHEMA = ix.TABLE_SCHEMA
AND c.TABLE_NAME = ix.TABLE_NAME
AND c.COLUMN_NAME = ix.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