我有一个问题,我需要对指向同一个表的多个外键进行级联..
[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
This results in the warning that the cascade "may cause cycles or multiple cascade path"
所以我尝试仅向insight_id添加级联,结果是:
The DELETE statement conflicted with the REFERENCE constraint
有什么想法吗?
谢谢
丹尼尔
最佳答案
您必须将其实现为见解的删除触发器,而不是删除触发器,才能使其正常工作。像这样的东西:
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)
<小时/>
经常使用级联删除和大量外键,您需要花时间制定“级联”顺序,以便发生在“树”顶部的删除成功级联到引用表。但在本例中这是不可能的。
关于sql - MS SQL "ON DELETE CASCADE"多个外键指向同一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018099/