sql - CASCADE 多对多自引用表中的删除

标签 sql tsql foreign-keys cascade cascading-deletes

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?我不明白这如何导致循环 - 每次删除主表中的记录时,只应删除关系表中的相关记录。

enter image description here

最佳答案

阅读 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/

相关文章:

sql - 转义 bash 中的特殊字符,case 函数

MySQL 更新内连接别名

sql - T-SQL : How to log erroneous entries during import

sql-server - TSQL RAISERROR 作为警告

Django 外键 to_field

mysql - SQL从多个表中选择计数

sql - Postgresql 查询以在文本字段中搜索多个字符串

sql - 如果您不在事务中,SET XACT_ABORT ON 是否会在存储过程中执行任何操作?

SQL 需要外列中的文字值

Mysql - 将auto_increment添加到主键