查找子表以进行级联删除

时间:2013-09-19 01:49:44

标签: sql sql-server-2008

我刚从表中删除了一些记录。消息选项卡列出了"受影响的行数x"我假设两次,因为为子表删除了相同数量的记录。我是这个数据库的新手,没有文档。

有没有简单的方法来查找子表?

1 个答案:

答案 0 :(得分:0)

如果您使用SQL Server Management Studio,则可以右键单击Table并单击“View Dependencies”。当您选择“依赖于[TableName]的对象”时,您将获得一个列表。如果有很多存储过程和函数,它可能会很大。您将能够非常轻松地找到表格,因为它们具有独特的“表格”图标。

但是,如果您无法使用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的可能性