我刚刚从表中删除了几条记录。我假设消息选项卡列出了两次“受影响的行数 x”,因为子表删除了相同数量的记录。我是这个数据库的新手,没有文档。
有没有一种简单的方法可以找到子表?
我刚刚从表中删除了几条记录。我假设消息选项卡列出了两次“受影响的行数 x”,因为子表删除了相同数量的记录。我是这个数据库的新手,没有文档。
有没有一种简单的方法可以找到子表?
如果您使用 SQL Server Management Studio,您可以右键单击表并单击“查看依赖项”。当您选择“依赖于 [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
顺便说一句,不排除触发的可能性