Sql server SQL Server-维护引用完整性,无需级联而不是触发器

Sql server SQL Server-维护引用完整性,无需级联而不是触发器,sql-server,triggers,cascade,referential-integrity,Sql Server,Triggers,Cascade,Referential Integrity,我有一个表(TableB),它与父表(TableA)具有外键关系 删除表a中的记录时,我希望通过删除表B中引用表a中已删除记录的所有记录来保持引用完整性 通常我会删除级联。但是,由于SQL Server中的表结构和针对多个级联路径的过度保护措施,这对于这种特定关系是不可能的 我也不能使用INSTEAD OF触发器,因为TableA本身有一个级联外键关系 我想做的是将TableA和TableB之间的关系更改为ON DELETE SET NULL,然后创建AFTER触发器来清除TableB中的NUL

我有一个表(TableB),它与父表(TableA)具有外键关系

删除表a中的记录时,我希望通过删除表B中引用表a中已删除记录的所有记录来保持引用完整性

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

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

我想做的是将TableA和TableB之间的关系更改为ON DELETE SET NULL,然后创建AFTER触发器来清除TableB中的NULL记录


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

您是否可以更改另一个限制条件,该限制条件阻止您在删除级联时将此限制条件添加为

是否可以添加一个
DeleteMe
列,然后发出一个
UPDATE a SET DeleteMe=1
,然后使用after触发器先删除表B行,然后删除请求的表a行


您能否以某种方式拆分或合并表(即垂直拆分或合并)以分离它们相互排斥的依赖关系?

您能否解释一下“由于表结构和针对多个级联路径的过度保护”的含义也许包括你的表格定义?我知道人们的直接想法是看设计,但我不认为这是特别不合理的,在任何情况下,重组都不是一个选项。因此,我只是想寻求一些建议,如何在不重新设计的情况下解决这个特殊问题。我想这个答案总结了我对SQL Server的情况和想法,只是好奇,有什么现实世界的限制阻止您在子表上发出delete命令,然后在父表上发出delete命令,这两个命令可能都包含在一个事务中?听起来您对这个层叠问题的复杂性有两层之深。我真的建议您修改表以利用内置的SQL功能。我只是不认为你会自制一个比内置在平台中更好的答案。@PhilipKelley这样做没有真正的限制,我已经考虑过作为替代解决方案。然而,如果我能让数据库在有人可能直接修改数据(虽然不太可能,但可能)的情况下强制执行RI,那将是更好的选择。1。我可以在其他地方打破瀑布路径。然而,这种关系将是我理想的地方,因为它是最不重要的。2.这是可行的,但我想我更喜欢类似的SET-NULL解决方案。3.我认为这不会消除多个级联路径。项取决于拆分表的方式以及多个约束的确切性质。所以,考虑到您所说的,您关于更新为NULL的想法听起来是可行的+一个好问题。