我有一个与父表(TableA)有外键关系的表(TableB)。SQL Server - 保持不带CASCADE和INSTEAD OF触发器的引用完整性
当我删除表A中的记录时,我想通过删除表B中引用TableA中的删除记录的所有记录来保持参照完整性。
通常我会删除级联。但是由于SQL Server中的表结构和针对多个级联路径的过度保护措施,对于此特定关系而言,这是不可能的。
我也不能使用INSTEAD OF触发器,因为TableA本身具有CASCADE外键关系。
我在做的是将TableA和TableB之间的关系改为ON DELETE SET NULL,然后创建一个AFTER触发器来清理TableB中的NULL记录。
有没有更好的方法来处理这种情况?
你能解释一下你的意思吗?“由于表结构和针对多个层叠路径的过度保护防护措施”,并且可能包括您的表定义? – JohnFx 2012-01-27 17:22:55
我明白,人们的直接想法是看设计,但我认为这不是特别不合理,在任何情况下,重组都不是一种选择。所以我只是在寻找如何解决这个问题而不需要重新设计的建议。我认为这个答案总结了我对SQL Server安全保护[级联删除导致多个级联路径]的情况和想法(http://stackoverflow.com/a/5407007/295813) – 2012-01-27 17:29:50
只是好奇,什么现实世界的限制阻止你发布在子表上删除,然后在父项上删除,两者都可能包含在事务中? – 2012-01-27 17:34:00