Tim*_*ter 7 sql t-sql sql-server-2005 constraints foreign-key-relationship
在SQL-Server中处理自引用外键约束的推荐方法是什么?
表 - 型号:

fiData引用tabData中的上一条记录.如果我删除引用的记录,则fiData数据库会引发异常:
"DELETE语句与SAME TABLE REFERENCE约束冲突"FK_tabDataPrev_tabDataNext".冲突发生在数据库"MyDataBase",表"dbo.tabData",列'fiData'"
如果Enforce Foreignkey Constraint设置为"是".
我不需要级联删除被引用的记录,但我需要设置fiData=NULL它被引用的位置.我的想法是设置Enforce Foreignkey Constraint为"No"并创建一个删除触发器.这是值得推荐还是有更好的方法?
谢谢.
与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)
Run Code Online (Sandbox Code Playgroud)
它的短,它的简洁,它不会是必要的,如果的SQL Server可以处理外键级联到同一个表(在其他RDBMS",你可以只指定ON DELETE SET NULL为外键约束,情况因人而异).