SQL Server - 在没有CASCADE和INSTEAD OF触发器的情况下维护参照完整性

时间:2012-01-27 17:09:57

标签: sql-server triggers cascade referential-integrity

我有一个表(TableB)与父表(TableA)有外键关系。

当我删除表A中的记录时,我希望通过删除TableB中引用TableA中已删除记录的所有记录来保留参照完整性。

通常我会删除CASCADE。但是,由于表结构和针对SQL Server中多个级联路径的过度保护安全措施,这对于此特定关系是不可能的。

我也不能使用INSTEAD OF触发器,因为TableA本身上有一个CASCADE外键关系。

我正在考虑做的是将TableA和TableB之间的关系更改为ON DELETE SET NULL,然后创建一个AFTER触发器来清理TableB中的NULL记录。

有没有更好的方法来处理这种情况?

1 个答案:

答案 0 :(得分:0)

您是否可以更改阻止您将其添加为ON DELETE CASCADE的其他约束?

您可以添加DeleteMe列,然后发出UPDATE A SET DeleteMe = 1,然后使用after触发器先删除表B行,然后再将所请求的表A行删除?

你能以某种方式分割或合并表(垂直,即),以分隔它们相互排斥的依赖关系吗?