CASCADE在多对多自引用表中删除

时间:2013-11-11 15:59:03

标签: sql tsql foreign-keys cascade cascading-deletes

下面的表 DISPLAY_TAB 是一个自引用表,可以包含父标签和子标签。父选项卡可以有多个子选项卡,子选项卡可以属于多个父选项卡。

我想在主表和关系表 DISPLAY_TAB_GROUPING 之间建立CASCADE DELETE关系,所以当删除父或子选项卡时 - 关系也会自动删除(只是关系,而不是实际的选项卡)记录)。所以我在字段TAB_ID_R_1和TAB_ID_R_2表的 DISPLAY_TAB_GROUPING 上创建了一个FOREIGN KEY约束,引用了 DISPLAY_TAB 表中的TAB_ID。并且它工作正常,当我为其中一个关系添加ON DELETE CASCADE时它工作正常,但是当我为它们尝试它时 - 它会抛出一个错误,这个“可能导致循环或多个级联路径”

如何为两种关系设置ON CASCADE DELETE?我不知道这会如何导致循环 - 每次删除主表中的记录时,只应删除关系表中的相关记录。

enter image description here

1 个答案:

答案 0 :(得分:4)

阅读this知识库文章,其中包括以下内容......

  

您收到此错误消息,因为在SQL Server中,表不能   在所有级联参照的列表中出现不止一次   由DELETE或UPDATE语句启动的操作。   例如,级联引用操作树必须只有   级联引用操作的特定表的一个路径   树。

要执行您想要的操作,DISPLAY_TAB_GROUPING表必须出现两次。我建议您使用实现删除代码的存储过程。