Каждый продукт SQL имеет некоторый способ запрашивать базу данных для данных схемы, включая ключи.Научиться использовать Information_Schema лучше всего IMHO, потому что это стандарт для большинства платформ (насколько я помню, Oracle его не реализует).
SQL Server, вероятно, имеет несколько более простых запросов со своими собственными каталогами, но следующие несколько проблематичныезапрос дает вам именно то, что вы хотите, и является наиболее кроссплатформенным, который вы можете получить.
SELECT
FK.TABLE_NAME as child_table,
CU.COLUMN_NAME as child_column,
PK.TABLE_NAME as parent_table,
PT.COLUMN_NAME as parent_column,
C.CONSTRAINT_NAME
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK
ON C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK
ON C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU
ON C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME
INNER JOIN
(
SELECT
i1.TABLE_NAME, i2.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2
ON i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME
WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY'
) PT
ON PT.TABLE_NAME = PK.TABLE_NAME
ORDER BY
1,2,3,4