我在向SQL Server中的外键添加级联删除时遇到问题。表A有三列。表A中的第1列和第2列是对表B中同一列的外键查找。我希望删除表B中的一行,以基于这些外键对表A上的行上的删除进行级联。SQL Server外键引起周期或多个级联路径
表A中的另一列有一个外键查找表C.如果表C中的行被删除,那么我想对应的单元格设置为空表A
当我加入这些限制我引发了错误:
引入表'RelatedDeliverableUnit'上的FOREIGN KEY约束'FK_RDU_TODELIVERABLEUNITREF'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
我对此有点坚持,Oracle似乎对这个逻辑非常满意。我使用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"/>
预先感谢任何帮助
谢谢你的建议。我也想知道添加这是一个单一的外键,两列查找相同的引用列,但我不确定这是否允许。我得看看我猜的触发器! – Fraser