7

我有一张表,其中primary key一张foreign key引用了same table primary key. 即同一张桌子上有父母和孩子。在 sql server 中,删除规则有三个选项。但只能设置"NO ACTION"删除规则。"cascade" delete我知道由于循环和链接,无法设置。但是为什么不允许其他选项?尤其是那个"SET NULL"

现在我必须手动执行此操作。我必须找到子记录并将外键设置为空。之后我可以删除父级。为什么不能为它设置规则?

4

1 回答 1

3

因为它不能同时在同一张表上执行两个操作,它们是:

- 删除父级。

-更新孩子。

变异表是由 UPDATE、DELETE 或 INSERT 语句修改的表,或者可能会因 DELETE CASCADE 约束的影响而更新的表。

您可以通过创建一个过程来克服手动操作,该过程将持有父键以删除记录并将子键设置为 NULL。

procedure(parent_id) --takes the id as a parameter

   update table set null where foreign_key = parent_id;

   delete from table where id = parent_id;

end;
于 2018-03-02T20:25:13.403 回答