SELECT sc.schemaname, co.constraintname, t.tablename, cg.descriptor, t2.tablename, cg2.descriptor, f.deleterule, f.updaterule
FROM sys.sysconstraints co
JOIN sys.sysschemas sc ON co.schemaid = sc.schemaid
JOIN sys.systables t ON co.tableid = t.tableid
JOIN sys.sysforeignkeys f ON co.constraintid = f.constraintid
JOIN sys.sysconglomerates cg ON f.conglomerateid = cg.conglomerateid
JOIN sys.sysconstraints co2 ON f.keyconstraintid = co2.constraintid
JOIN sys.systables t2 ON co2.tableid = t2.tableid
JOIN sys.syskeys k ON co2.constraintid = k.constraintid
JOIN sys.sysconglomerates cg2 ON k.conglomerateid = cg2.conglomerateid
WHERE co.type = 'F'
and sc.schemaname = current schema
две записи дескриптора содержат список номеров столбцов для каждой таблицы, например
BTREE (2,1)
где числа соответствуют номерам столбцов в таблице syscolumns соответствующей таблицы.
Если у кого-нибудь есть элегантный способ извлечь это в этом запросе, я хотел бы знать. Я получаю список всех столбцов для таблицы в отдельном запросе и извлекаю имена из этого после анализа дескрипторов для получения чисел.