SQL Server错误:在表上引入外键约束可能会导致循环或多个级联路径

时间:2020-07-06 19:35:35

标签: sql-server foreign-keys

我有两个表,User and 数据. For audit purposes, I have two columns added in the 数据table: AddedBy and LastModifiedBy`。

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

在表“数据”上引入外键约束“ 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条件?

1 个答案:

答案 0 :(得分:1)

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

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

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

作为一种解决方法,您可以在“不删除任何操作”上建立一种关系,或者在USER上使用INSTEAD OF DELETE触发器来处理级联行为。