gpt4 book ai didi

sql - 自引用外键约束和删除

转载 作者:行者123 更新时间:2023-12-04 11:30:21 24 4
gpt4 key购买 nike

在 SQL-Server 中处理自引用外键约束的推荐方法是什么?

表模型:

enter image description here
fiData引用 tabData 中的前一条记录。如果我删除了 fiData 引用的记录,数据库抛出异常:

"The DELETE statement conflicted with the SAME TABLE REFERENCE constraint "FK_tabDataPrev_tabDataNext". The conflict occurred in database "MyDataBase", table "dbo.tabData", column 'fiData'"



如果 Enforce Foreignkey Constraint设置为"is"。

我不需要级联删除引用的记录,但我需要设置 fiData=NULL它被引用的地方。我的想法是设置 Enforce Foreignkey Constraint为“否”并创建一个删除触发器。这是值得推荐的还是有更好的方法?

谢谢你。

最佳答案

与 Andomar 不同,我很乐意使用触发器 - 但我不会删除约束检查。如果您将其实现为 instead of触发器,您可以在执行实际删除之前将其他行重置为 null:

CREATE TRIGGER T_tabData_D
on tabData
instead of delete
as
set nocount on
update tabData set fiData = null where fiData in (select idData from deleted)
delete from tabData where idData in (select idData from deleted)

它很短,很简洁,如果 SQL Server 可以处理到同一个表的外键级联,则没有必要(在其他 RDBMS 中,您可以只为外键约束 YMMV 指定 ON DELETE SET NULL)。

关于sql - 自引用外键约束和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com