SQL-多个级联路径

SQL-多个级联路径,sql,path,sql-server-2012,cascade,cascading,Sql,Path,Sql Server 2012,Cascade,Cascading,我有以下情况: Child1对Parent.ID具有FK Child2对Child1.ID具有FK,对Parent.ID具有另一个FK 现在我需要更新Parent.ID时的级联路径-因此我在两个外键上都添加了“ON UPDATE CASCADE”选项,但一旦我想保存Child2的FK(橙色),我就会收到以下错误消息: 在表“…”上引入外键约束“…”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束 为什么会出现这种错误?更新Parent.I

我有以下情况:

  • Child1对Parent.ID具有FK

  • Child2对Child1.ID具有FK,对Parent.ID具有另一个FK

现在我需要更新Parent.ID时的级联路径-因此我在两个外键上都添加了“ON UPDATE CASCADE”选项,但一旦我想保存Child2的FK(橙色),我就会收到以下错误消息:

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

为什么会出现这种错误?更新Parent.ID对从Child2到Child1的FK没有影响,因此数据应始终处于一致状态


什么是级联路径?如果我将FK从Child2删除到Child1,仍然有两个“更新级联”查看Parent.ID,但这是一个有效的设置。是否必须至少有某种循环才能有多个级联路径?

您正在运行哪个SQL Server版本。自从SQL 2008以来,MS实现hierarchyid就是为了处理这样的问题:您有两个从Child2到父级的级联更新路径——这导致了异常。这是一个设计缺陷。@Ralphi谢谢,我会仔细阅读。@FutbolFan我之所以选择此设计,是因为(由于性能原因)我不想将Child2与Child1合并,而只是为了访问“父”中的数据。(Child2.ParentID链接到父数据库中最重要的数据集)。在您发布的链接中,如果删除了FK孙子.Child2ID,还会有两条级联路径吗?