MS SQL“ ON DELETE CASCADE”指向同一张表的多个外键?

问题描述 投票:21回答:1

我有一个问题,我需要在指向同一个表的多个外键上级联。

[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约束冲突

有什么想法吗?

谢谢

丹尼尔

sql sql-server foreign-keys constraints cascading-deletes
1个回答
29
投票

您必须将其实现为对见解的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)

通常,使用级联删除和大量外键时,您需要花一些时间来计算“级联”顺序,以便将在“树”顶部发生的删除成功地级联到引用表。但这在这种情况下是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.