поиск внешних ключей на сервере MS SQL с information_schema - PullRequest
5 голосов
/ 11 ноября 2011

Я пытаюсь найти все таблицы, которые имеют внешние ключи, указывающие на конкретную таблицу. Итак, я написал это:

select t1.TABLE_NAME as pointsfrom, t2.TABLE_NAME as pointsto
        from INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS r
        join INFORMATION_SCHEMA.TABLE_CONSTRAINTS t1 on t1.CONSTRAINT_NAME=r.CONSTRAINT_NAME
        join INFORMATION_SCHEMA.TABLE_CONSTRAINTS t2 on t2.CONSTRAINT_NAME=r.UNIQUE_CONSTRAINT_NAME
        where t2.table_name = @mytable

Это работает 90% времени, или, если быть точным, для 22 из 24 внешних ключей в базе данных, над которой я работаю. Но для 2-х FK уникальное_константное_имя не соответствует ни одному имени в табличных ограничениях.

Имена тоже немного смешные. Одним из них является «обозначение среды», с пробелом. Поле, на которое указывает FK, называется «environment_designator» с подчеркиванием. У другого есть unique_constraint_name «имя файла уникально», которое не соответствует чему-либо, что я вижу в определении таблицы «от» или «до».

Есть ли еще место, где я должен искать совпадение с именем unique_constraint_name?

1 Ответ

7 голосов
/ 11 ноября 2011

Попробуйте это:

SELECT OBJECT_NAME(parent_object_id), OBJECT_NAME(referenced_object_id)
    FROM sys.foreign_keys
    WHERE referenced_object_id = OBJECT_ID(@mytable)
...