MS SQL“ON DELETE CASCADE”指向同一个表的多个外键?
问题描述:
你好, 我有一个问题,我需要在指向同一个表的多个外键的级联..MS SQL“ON DELETE CASCADE”指向同一个表的多个外键?
[Insights]
| ID | Title |
| 1 | Monty Python |
| 2 | Spamalot |
[BroaderInsights_Insights]
| broaderinsight_id | insight_id |
| 1 | 2 |
基本上当任一记录表被删除,我需要关系的见解一个或两个也可删掉..
我已经试过这样:
CREATE TABLE broader_insights_insights(id INT NOT NULL IDENTITY(1,1),
broader_insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
insight_id INT NOT NULL REFERENCES insights(id) ON DELETE CASCADE,
PRIMARY KEY(id))
Go
这将导致警告级联“可能会导致循环或多重级联路径”
所以香港专业教育学院尝试添加一个级联只是insight_id,这导致:
“DELETE语句冲突与基准约束”
任何想法?
感谢
丹尼尔
答
与级联删除和大量的外键的
你必须执行,这个是有见解的INSTEAD OF删除触发器,以得到它的工作。喜欢的东西:
create trigger T_Insights_D
on Insights
instead of delete
as
set nocount on
delete from broader_insights_insights
where insight_id in (select ID from deleted) or
broader_insight_id in (select ID from deleted)
delete from Insights where ID in (select ID from deleted)
与级联删除和大量的外键的
通常情况下,你需要花时间来制定出一个“层叠”顺序,以便删除发生在“树”的顶部成功地级联到引用表。但在这种情况下这是不可能的。
这样的级联删除很少是一个好主意。想想如果你在那里还有“布莱恩的生活”会发生什么。删除LoB,删除级联以杀死Monty Python,级联删除Spamalot。由于它是循环关系,因此删除该圆的任何成员都会删除整个圆。 – 2011-02-16 15:10:24
我误解了瀑布?我认为这个概念是当被引用的记录被删除时关系也被删除了?你会如何建议实现这一目标? – 2011-02-16 15:17:37