下面的表 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?我不知道这会如何导致循环 - 每次删除主表中的记录时,只应删除关系表中的相关记录。
答案 0 :(得分:4)
阅读this知识库文章,其中包括以下内容......
您收到此错误消息,因为在SQL Server中,表不能 在所有级联参照的列表中出现不止一次 由DELETE或UPDATE语句启动的操作。 例如,级联引用操作树必须只有 级联引用操作的特定表的一个路径 树。
要执行您想要的操作,DISPLAY_TAB_GROUPING表必须出现两次。我建议您使用实现删除代码的存储过程。