我有一个巨大的遗留数据库,其中一个表有多个外键指向另一个表,并且看不到一个级联,类似于下面的示例表:
create table Users (
Id int primary key identity,
Name varchar(max)
)
create table Products (
Id int primary key identity,
Name varchar(max),
CreatedBy int foreign key references Users(Id),
UpdatedBy int foreign key references Users(Id)
)
insert into Users values('Bar')
insert into Users values('Baz')
insert into Products values('Foo', 1, 2)
我需要能够删除一些旧数据,但它当然会引发引用异常:
delete from Users where Name='Bar'
DELETE 语句与 REFERENCE 约束“FK__Products__Create__1AD3FDA4”冲突。冲突发生在数据库“Foo”、表“dbo.Products”、列“CreatedBy”中。
由于数据库的复杂性,我无法预先删除所有引用,因此我尝试以编程方式添加临时外键,并设置级联来解决它们。但是,对于这个具有多个指向另一个表的外键的特定表,这会导致cycles or multiple cascade paths
第二个UpdatedBy
更改:
alter table Products add foreign key (CreatedBy) references Users(Id) on delete cascade
alter table Products add foreign key (UpdatedBy) references Users(Id) on delete cascade
在表“Products”上引入 FOREIGN KEY 约束“FK__Products__Update__1DB06A4F”可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
我怎样才能delete from Users where
在保持参照完整性的同时工作,无论是通过某种方式解决多个级联路径问题还是其他方式?