Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server外键导致循环或多个级联路径_Sql Server_Liquibase - Fatal编程技术网

Sql server SQL Server外键导致循环或多个级联路径

Sql server SQL Server外键导致循环或多个级联路径,sql-server,liquibase,Sql Server,Liquibase,在SQL Server中将级联删除添加到外键时遇到问题。表A有三列。表A中的第1列和第2列是表B中同一列的外键查找。我希望删除表B中的一行,以基于这些外键级联删除表A中的一行 表A中的另一列有表C的外键查找。如果删除了表C中的一行,则我希望表A中相应的单元格设置为null 当我添加这些约束时,会抛出错误: 在表“RelatedDeliverableUnit”上引入外键约束“FK_RDU_TODELIVERABLEUNITREF”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时

在SQL Server中将级联删除添加到外键时遇到问题。表A有三列。表A中的第1列和第2列是表B中同一列的外键查找。我希望删除表B中的一行,以基于这些外键级联删除表A中的一行

表A中的另一列有表C的外键查找。如果删除了表C中的一行,则我希望表A中相应的单元格设置为null

当我添加这些约束时,会抛出错误:

在表“RelatedDeliverableUnit”上引入外键约束“FK_RDU_TODELIVERABLEUNITREF”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束

我有点受不了,甲骨文似乎对这种逻辑非常满意。我使用Liquibase添加这些约束。我认为错误在于我的逻辑,而不是语法,但为了完整起见,这里是管理外键的liquidbase脚本:

    <addForeignKeyConstraint constraintName="FK_RDU_FROMDELIVERABLEUNITREF" baseTableName="relatedDeliverableUnit"
                             baseColumnNames="FROMDELIVERABLEUNITREF" referencedTableName="DELIVERABLEUNIT" referencedColumnNames="DELIVERABLEUNITREF" onDelete="CASCADE"/>

    <addForeignKeyConstraint constraintName="FK_RDU_TODELIVERABLEUNITREF" baseTableName="relatedDeliverableUnit"
                             baseColumnNames="TODELIVERABLEUNITREF" referencedTableName="DELIVERABLEUNIT" referencedColumnNames="DELIVERABLEUNITREF" onDelete="CASCADE"/>                        

    <addForeignKeyConstraint constraintName="FK_RDU_RELATIONSHIPREF"
                             baseTableName="relatedDeliverableUnit" baseColumnNames="RELATIONSHIPREF" referencedTableName="RELATIONSHIPTYPES" referencedColumnNames="RELATIONSHIPREF" onDelete="SET NULL"/>                      


提前感谢您提供的任何帮助

我无法找到更高版本的相应文档,但解决了此问题:

由单个删除或更新触发的一系列级联引用操作必须形成一个不包含循环引用的树。在删除或更新导致的所有级联引用操作的列表中,任何表都不能出现一次以上。级联引用操作树到任何给定表的路径不得超过一条。树的任何分支在遇到未指定操作或默认操作的表时终止

后来的版本并没有改变这一点。你犯了这样的错误:

级联引用操作树到任何给定表的路径不得超过一条

我所知道的实现这一点的唯一方法是使用
而不是
触发器实现B和A之间的一个级联,而不是在删除时使用

表A和表C之间的关系不应受到任何影响



()

谢谢你的建议。我还想添加一个外键,它有两列查找同一引用列,但我不确定这是否允许。我想我得看看触发器!