表 DISPLAY_TAB 下面是一个可以包含父选项卡和子选项卡的自引用表。一个父标签可以有多个子标签,一个子标签可以属于多个父标签。
我想在主表和关系表之间建立一个CASCADE DELETE关系 DISPLAY_TAB_GROUPING 因此,当删除父选项卡或子选项卡时 - 关系也会自动删除(只是关系,而不是实际的选项卡记录)。所以我在 上创建了一个 FOREIGN KEY 约束DISPLAY_TAB_GROUPING 对于字段 TAB_ID_R_1 和 TAB_ID_R_2 表,引用 中的 TAB_ID DISPLAY_TAB table 。它工作正常,当我为其中一个关系添加 ON DELETE CASCADE 时它工作正常,但是当我为两者尝试它时 - 它会抛出一个错误,即“可能导致循环或多个级联路径”。
如何为两个关系设置 ON CASCADE DELETE?我不明白这如何导致循环 - 每次删除主表中的记录时,只应删除关系表中的相关记录。
最佳答案
阅读 this KB 文章,其中包括以下内容...
You receive this error message because in SQL Server, a table cannot appear more than one time in a list of all the cascading referential actions that are started by either a DELETE or an UPDATE statement. For example, the tree of cascading referential actions must only have one path to a particular table on the cascading referential actions tree.
要执行您想要的操作,DISPLAY_TAB_GROUPING 表必须出现两次。我建议您使用一个存储过程来实现您的删除代码。
关于sql - CASCADE 多对多自引用表中的删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910621/