Как проверить, используется ли ключ записи в других таблицах в качестве внешнего ключа (sql)? - PullRequest
8 голосов
/ 31 января 2012

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

Как я могу понять, что запись из этой таблицы (например, первая запись "ID = 1") используется в другой таблице?

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

Ответы [ 2 ]

8 голосов
/ 13 февраля 2012

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

SELECT 
sys.sysobjects.name,
sys.foreign_keys.*
FROM 
sys.foreign_keys 
inner join sys.sysobjects on
    sys.foreign_keys.parent_object_id = sys.sysobjects.id
WHERE 
referenced_object_id = OBJECT_ID(N'[dbo].[TableName]') 
2 голосов
/ 01 февраля 2012

Вам нужно , чтобы присоединиться ко всем остальным столам. Как это:

select *
from Parents
where
 exists(select * from Children1 where ...)
 or exists(select * from Children2 where ...)
 or exists(select * from Children3 where ...)

Если все ваши столбцы FK проиндексированы, это будет чрезвычайно эффективно. Вы получите хорошие слияния.

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