【问题标题】:SQL Server error: introducing foreign key constraint on table may cause cycles or multiple cascade pathsSQL Server 错误:在表上引入外键约束可能会导致循环或多个级联路径
【发布时间】:2020-10-27 00:02:32
【问题描述】:

我有两张表,User and Data. For audit purposes, I have two columns added in the Datatable:AddedByandLastModifiedBy`。

两列都引用User 表及其UserId 列。我在两个外键上都设置了 On delete set null 约束。 SQL Server 不允许我创建表Data 并抛出错误:

在表“Data”上引入 FOREIGN KEY 约束“FK__Data__LastModifi__0A9D95DB”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

这些是 SQL 脚本:

CREATE TABLE [User]
( 
    UserId int PRIMARY KEY IDENTITY(1,1),
    Name varchar(100) not null
)
 
CREATE TABLE [Data]
(
    Id int PRIMARY KEY IDENTITY(1,1),
    A int,
    B varchar(10),
    AddedBy int 
        FOREIGN KEY REFERENCES [User](UserId) 
                ON DELETE SET NULL,
    LastModifiedBy int 
        FOREIGN KEY REFERENCES [User](UserId) 
                ON DELETE SET NULL
)

删除ON DELETE 约束解决了问题,但问题是为什么我不能有两个ON DELETE SET NULL 条件?

【问题讨论】:

    标签: sql-server foreign-keys


    【解决方案1】:

    为什么我不能有两个 ON DELETE SET NULL 条件?

    因为这会导致多个级联路径,而 SQL Server 根本不支持。

    对此有一个出色的反馈请求,并允许在父子关系中级联here

    作为一种解决方法,您可以在 DELETE NO ACTION 上建立关系之一,或者在 USER 上使用 INSTEAD OF DELETE 触发器来处理级联行为。

    【讨论】:

      猜你喜欢
      • 2015-10-26
      • 2010-10-25
      • 2019-10-20
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多