在SQL-Server中处理自引用外键约束的推荐方式是什么?自引用外键约束和删除
表 - 型号:
fiData
引用在tabData以前的纪录。如果我删除由fiData
引用的记录,该数据库将引发异常:
“DELETE语句冲突以引用同一表 约束‘FK_tabDataPrev_tabDataNext’。该冲突发生于 数据库‘MyDatabase的’,表“dbo.tabData”,列'fiData'“
如果Enforce Foreignkey Constraint
设置为”是“。
我不需要级联删除被引用的记录,但我需要在其引用的位置设置fiData=NULL
。我的想法是将Enforce Foreignkey Constraint
设置为“否”并创建删除触发器。这是值得推荐的还是有更好的方法?
谢谢。
谢谢。但是我在创建触发器时遇到了一个异常:“INSTEAD OF DELETE/UPDATE触发器无法在具有DELETE/UPDATE动作定义的级联的外键的表上定义”。 – 2011-03-24 12:31:04
我知道这个评论太迟了,但对于像我这样搜索的人来说。 这只会删除一个条目。它不会递归地级联。 – Arif 2012-10-05 11:56:39
@Arif - 这是“ON DELETE SET NULL”,而不是“ON DELETE CASCADE”。前者从不需要递归。对于“ON DELETE CASCADE”,我推荐一个CTE,它首先计算所有“ID”值的闭包,然后执行删除操作。 – 2012-10-05 11:59:59