У меня есть большая база данных SQL 2012 (100 таблиц), в которой мне нужно найти все ограничения, в которых для ссылочного действия установлено значение CASCADE (обновление или удаление).Запрос, чтобы найти все ограничения FK и их столбцы таблицы ссылок
В this useful answer я вижу, что можно перечислить ограничения, используя следующую T-SQL (адаптировано несколько):
SELECT
name,
delete_referential_action_desc,
update_referential_action_desc
FROM
sys.foreign_keys
WHERE
update_referential_action_desc = 'CASCADE' OR
delete_referential_action_desc = 'CASCADE';
Это обеспечивает полезный список:
name delete_referential_action_desc update_referential_action_desc
----------------------------------------------------------------------
FK_name001 CASCADE CASCADE
FK_name002 CASCADE NO_ACTION
FK_name003 CASCADE NO_ACTION
Тем не менее, это возможно, для расширения кода, так что для каждого ограничения включаются имена имен таблиц и столбцов, например?
name delete_referential_action_desc update_referential_action_desc ParentTable ParentCol ChildTable ChildCol
----------------------------------------------------------------------------------------------------------------------------
FK_name001 CASCADE CASCADE Table1 Col1 Table2 Col2
Я пробовал различные изменения тянущие значений из sys.objects
, но не могу понять, как это работает, или является ли это даже правильный подход.
Update
Пожалуйста, обратите внимание, что я не хочу к ALTER
ничего, или делать какие-либо изменения схемы. Я просто хочу просмотреть список, чтобы я мог выполнять дальнейшие действия вручную. У меня нет уверенности или опыта до edit this gigantic query, чтобы вытащить основные точки.
Второй запрос в дубликата сделает это, вам просто нужно добавить предложение where, которое вы уже определили, чтобы ограничить вывод каскадными ключами. –
Но я не хочу, чтобы «Alter' ничего, я просто хочу * видеть * их – EvilDr
Я это понимаю. Сценарий может быть немного изменен для вывода определений без фактического их запуска. –