我有一个问题,我需要在指向同一个表的多个外键上级联。
[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
这会导致警告“级联”可能会导致循环或多个级联路径“
Soive尝试将级联添加到Insight_id中,结果是:
DELETE语句与REFERENCE约束冲突
有什么想法吗?
谢谢
丹尼尔
您必须将其实现为对见解的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)
通常,使用级联删除和大量外键时,您需要花一些时间来计算“级联”顺序,以便将在“树”顶部发生的删除成功地级联到引用表。但这在这种情况下是不可能的。