SQL Server 引入 FOREIGN KEY 约束可能会导致循环或多个级联路径

埃尔多拉多

我有两个表: T_User and T_Order

T_User
--------
ID
Name

T_Order 必须外键 T_User

T_Order
--------
ID
FK_UserActionOwnerID
FK_UserActionReceiverID

然后我在我的图表上建立了两个关系,从T_User ID到两个 FK 在T_Order. 我还为这两个关系设置为delete and update rulescascade因为我想要如果T_User记录将被删除,因此记录T_Order应该被删除,或者如果T_User ID会改变然后也更新它T_Order.但是我收到以下错误:

'T_User' 表已成功保存 'T_Order' 表 - 无法创建关系 'FK_T_Order_T_Users1'。在表 'T_Order' 上引入 FOREIGN KEY 约束 'FK_T_Order_T_Users1' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。请参阅以前的错误。

实物图:点此

里斯·琼斯

外键约束可能会导致循环或多个级联路径?@Martin-Brown 链接的问题建议使用触发器而不是级联外键。这是一个使用INSTEAD OF DELETE触发器来做(我认为)你想做的事情的例子

-- Create tables
create table dbo.T_User (
    ID int identity not null primary key,
    Name varchar(100) not null
)

create table dbo.T_Order (
    ID int identity not null primary key,
    FK_UserActionOwnerID int not null,
    FK_UserActionReceiverID int not null
)
go

-- Create foreign keys
alter table dbo.T_Order add constraint FK_T_Order_T_Users1 FOREIGN KEY (FK_UserActionOwnerID) REFERENCES dbo.T_User (ID) 
alter table dbo.T_Order add constraint FK_T_Order_T_Users2 FOREIGN KEY (FK_UserActionReceiverID) REFERENCES dbo.T_User (ID) 
go

-- Create trigger
create trigger tr_T_User_Delete on dbo.T_User instead of delete as
begin

    if (@@rowcount = 0) return

    delete o from dbo.T_Order o inner join deleted d on d.ID = o.FK_UserActionOwnerID

    delete o from dbo.T_Order o inner join deleted d on d.ID = o.FK_UserActionReceiverID

    delete u from dbo.T_User u inner join deleted d on d.ID = u.ID  

end
go

-- Demo
insert dbo.T_User (Name) values ('Peter'), ('Paul') -- Assume identity ID 1 and 2

insert dbo.T_Order (FK_UserActionOwnerID, FK_UserActionReceiverID) values (1, 1), (1, 2), (2, 2)

select * from dbo.T_Order

delete from dbo.T_User where ID = 1

select * from dbo.T_Order

您可以INSTEAD OF UPDATE以相同的方式使用触发器,但您可能需要考虑更新 ID 是否有意义 - 我通常不会期望这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用FOREIGN KEY的SQL语法

引入FOREIGN KEY约束可能会导致循环或多个级联路径-为什么?

如何找出什么FOREIGN KEY约束引用SQL Server中的表?

INSERT语句与FOREIGN KEY约束冲突-SQL Server

引入FOREIGN KEY约束可能会导致循环或多个级联路径。指定删除时不执行任何操作

实体框架核心:如何解决?引入外键约束可能会导致循环或多个级联路径

SQL会自动使“ REFERENCE”成为“ FOREIGN KEY”

可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束

FK约束可能会导致循环或多个级联路径

SQL错误:引入FOREIGN KEY约束可能会导致循环或多个级联路径。实体框架核心

具有相同必需属性类型的EF Core TPH实体导致“引入FOREIGN KEY约束”异常

SQL可能会导致循环或多个级联路径

无法执行DbCommand引入的FOREIGN KEY约束

如何防止错误:在表上引入FOREIGN KEY约束可能会导致循环或多个级联路径

在表上引入FOREIGN KEY约束可能会导致循环或多个级联路径,即使在完全删除受影响的字段之后也是如此

引入FOREIGN KEY约束-数据库设置

FOREIGN KEY可能会导致循环或多个级联路径异常

在表“ Employer”上引入FOREIGN KEY约束“ FK__Employer__postal__59FA5E80”可能会导致循环或多个级联路径

从熊猫读取时,MS SQL Server Management Studio导出为CSV会引入额外的字符

引入FOREIGN KEY约束可能会导致循环或多个级联路径

由于级联删除而导致的“ FOREIGN KEY约束引入”

与FOREIGN KEY约束冲突

C#,SQL Server:INSERT语句与FOREIGN KEY约束冲突

SQL FOREIGN KEY的

ef core 2 - 在表“Y”上引入 FOREIGN KEY 约束“X”可能会导致循环或多个级联路径

两个 SQL Server 表之间的多个 FOREIGN KEY

在表 'Y' 上引入 FOREIGN KEY 约束 'X' 可能会导致循环或多个级联路径

在表 'ReservedSeats' 上引入 FOREIGN KEY 约束 'FK_ReservedSeats_Seats_SeatId' 可能会导致循环或多个级联路径

Entity Framework Core 5 - 在表上引入 FOREIGN KEY 约束可能会导致循环或多个级联路径