首页 文章

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

提问于
浏览
4

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

我想在主表和关系表 DISPLAY_TAB_GROUPING 之间 Build CASCADE DELETE关系,因此当删除父或子选项卡时 - 关系也会自动删除(只是关系,而不是实际的选项卡记录) . 所以我在 DISPLAY_TAB_GROUPING 上为字段TAB_ID_R_1和TAB_ID_R_2表创建一个FOREIGN KEY约束,引用 DISPLAY_TAB 表中的TAB_ID . 并且它工作正常,当我为其中一个关系添加ON DELETE CASCADE时它工作正常,但是当我为它们尝试它时 - 它会抛出一个错误,这个"May cause cycles or multiple cascade paths" .

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

enter image description here

1 回答

  • 3

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

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

    要做你想做的事,DISPLAY_TAB_GROUPING表必须出现两次 . 我建议您使用实现删除代码的存储过程 .

相关问题