Поиск дочерней таблицы для каскадного удаления

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

Есть ли простой способ найти дочерний стол?

1 ответ

Если вы используете SQL Server Management Studio, вы можете щелкнуть правой кнопкой мыши по таблице и нажать "View Dependencies". Когда вы выбираете "Объекты, которые зависят от [TableName]", вы получите список. Это может быть довольно большим, если есть много хранимых процедур и функций. Вы сможете легко определить таблицы, поскольку они имеют отличительный значок "table".

Однако, если вы не можете использовать SSMS, вам нужно будет запустить скрипт. Этот скрипт будет отображать все внешние ключи с дочерними и родительскими таблицами:

SELECT db_name() AS CONSTRAINT_CATALOG, user_name(c_obj.uid) AS CONSTRAINT_SCHEMA, c_obj.name AS CONSTRAINT_NAME, db_name() 
 AS TABLE_CATALOG, user_name(t_obj.uid) AS TABLE_SCHEMA, t_obj.name AS TABLE_NAME, 
 CASE c_obj.xtype WHEN 'C' THEN 'CHECK' WHEN 'UQ' THEN 'UNIQUE' WHEN 'PK' THEN 'PRIMARY KEY' WHEN 'F' THEN 'FOREIGN KEY' END AS CONSTRAINT_TYPE,
 'NO' AS IS_DEFERRABLE, 'NO' AS INITIALLY_DEFERRED,
mt_obj.name AS ParentTable
FROM sysobjects c_obj, sysobjects t_obj, sysforeignkeys sf, sysobjects mt_obj 
WHERE permissions(t_obj.id) != 0 AND t_obj.id = c_obj.parent_obj AND c_obj.xtype IN ('F')
AND sf.constid = c_obj.id AND sf.rkeyid = mt_obj.id

BTW, не исключаю возможности TRIGGER

licensed under cc by-sa 3.0 with attribution.