SQL-запрос для получения имен таблиц, которые используют определенный столбец в качестве внешнего ключа - PullRequest
0 голосов
/ 08 января 2011

Какой sql-запрос вы бы написали, чтобы получить имена таблиц с определенным внешним ключом.

Eg. Person_Table(person_id,name,address,...)
    Purchases_Table(purchaseid, purchased_by_id(fkey)....)
    AccountDetails_Table(AccountId,PersonID,....)
    Roles_Table(PersonId,RoleID)

Теперь я хочу найти имена таблиц, в которых идентификатор личности используется в качестве внешнего ключа.Приведенная выше схема выдаст мне

Purchases_Table,AccountDetails_Table, Roles_Table

База данных: SQL Server

Ответы [ 2 ]

2 голосов
/ 08 января 2011
select OBJECT_NAME(fkc.parent_object_id) as TableName
    from sys.foreign_key_columns fkc
        inner join sys.columns c
            on fkc.referenced_object_id = c.object_id
                and fkc.referenced_column_id = c.column_id
    where fkc.referenced_object_id = OBJECT_ID('dbo.Person_Table') 
        and c.name = 'person_id'
0 голосов
/ 08 января 2011

Для postgresql вы можете сделать что-то вроде этого:

SELECT pt.tgargs, pt.tgnargs, pt.tgdeferrable, pt.tginitdeferred,
  pg_proc.proname, pg_proc_1.proname FROM pg_class pc,
  pg_proc pg_proc, pg_proc pg_proc_1, pg_trigger pg_trigger,
  pg_trigger pg_trigger_1, pg_proc pp, pg_trigger pt
WHERE  pt.tgrelid = pc.oid AND pp.oid = pt.tgfoid
  AND pg_trigger.tgconstrrelid = pc.oid
  AND pg_proc.oid = pg_trigger.tgfoid
  AND pg_trigger_1.tgfoid = pg_proc_1.oid
  AND pg_trigger_1.tgconstrrelid = pc.oid
  AND ((pc.relname= '<< DB_NAME >>')
  AND (pp.proname LIKE '%%ins')
  AND (pg_proc.proname LIKE '%%upd')
  AND (pg_proc_1.proname LIKE '%%del')
  AND (pg_trigger.tgrelid=pt.tgconstrrelid)
  AND (pg_trigger_1.tgrelid = pt.tgconstrrelid));

См. это сообщение (с 2000 года!) В списке рассылки Postgresql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...