删除级联正在删除整个子表

时间:2010-11-12 17:52:05

标签: sql-server parent-child cascade

我有两张桌子: Parent,有一个主键(parentID)和一些varchar(50)和Child类型的其他字段,如下所示:

childID, primary key
parentID, foreign key references Parent (parentID)
otherID, foreign key  to another table
  • 如果我从Child删除一行,没问题。
  • 如果我从Parent中删除一行,我在Child上得到一个外键约束错误 - 好,这是正确的。

现在,我修改了parentID键的关系,并将delete设置为cascade而不是No Action (我正在使用2008服务器工作室,右键单击列,选择修改,然后右键单击表设计并选择关系。然后我选择父/子表的关系并打开下面的插入/更新规范部分表设计师)

如果我从Child删除一行,再次没问题。 如果我从Parent中删除一行,则删除子表的所有行,即使其中大多数行都指向其他父ID。

我继承了这个DB及其所有表。我缺少一些属性设置吗?根据我的阅读,级联删除应该只删除指向我从Parent中删除的单个parentID的子行。

感谢。

2 个答案:

答案 0 :(得分:2)

是的,删除应仅删除与已删除的“父”相关的行。

查看级联删除设置,并查找可能写错的触发器。

答案 1 :(得分:1)

尝试设置SetNull而不是cascade,这会将您的子表列(其中父表的键退出)设置为 NULL