【发布时间】:2015-03-27 09:17:32
【问题描述】:
我有一张表,其中一张primary key 和一张foreign key 引用same table primary key。
即同一张桌子上有父母和孩子。在 sql server 中,删除规则有三个选项。但只能设置"NO ACTION"删除规则。我知道由于循环和链接,无法设置"cascade" delete。但是为什么不允许其他选项?尤其是"SET NULL" 之一。
现在我必须手动执行此操作。我必须找到子记录并将外键设置为空。之后我可以删除父级。为什么不能给它设置规则?
【问题讨论】:
-
在你的情况下,我认为 trigger on delete 做你想做的事。看这个CREATE TRIGGER
-
我想避免创建触发器,但这可能是一天结束时唯一的解决方案。我想知道是否有一些 DDL 解决方法来强制 sql server 允许“ONDELETE SET NULL”。如果不可能,那又是为什么呢?因为我看不到禁用“ONDELETE SET NULL”的原因与禁用“ONDELETE CASCADE”的原因相同。没有循环,也没有多个级联路径。我只是想确定在将其发布到 MS 愿望清单之前没有合乎逻辑的理由。
-
@matti 我找到了这个on delete set null
标签: sql sql-server foreign-keys self-referencing-table