在 SQL-Server 中处理自引用外键约束的推荐方法是什么?
桌子型号:
fiData
引用 tabData 中的先前记录。如果我删除引用的记录fiData
,数据库抛出异常:
“DELETE 语句与 SAME TABLE REFERENCE 冲突
约束“FK_tabDataPrev_tabDataNext”。冲突发生在
数据库“MyDataBase”,表“dbo.tabData”,列“fiData””
if Enforce Foreignkey Constraint
设置为“是”。
我不需要级联删除引用的记录,但我需要设置fiData=NULL
它被引用的地方。我的想法是设置Enforce Foreignkey Constraint
为“否”并创建删除触发器。这是值得推荐的还是有更好的方法?
谢谢。
与 Andomar 不同,我很乐意使用触发器 - 但我不会删除约束检查。如果您将其实现为instead of
触发器,您可以在执行实际删除之前将其他行重置为空:
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 中,您可能可以只指定ON DELETE SET NULL
对于外键约束,YMMV)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)