我有两个表,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
条件?
答案 0 :(得分:1)
为什么我不能有两个ON DELETE SET NULL条件?
因为这会导致多个级联路径,而SQL Server根本不支持该路径。
对此有一个出色的反馈请求,并允许在父子关系here中级联。
作为一种解决方法,您可以在“不删除任何操作”上建立一种关系,或者在USER上使用INSTEAD OF DELETE触发器来处理级联行为。