SQL 服务器删除事件

SQL Server On Delete Event

我四处寻找这个问题的答案,但我在尝试在我正在使用的数据库模型中的两个特定 table 之间实现级联删除条件时遇到了问题。当我去部署时,SQL 服务器不断抛出错误,提示可能存在循环或多个级联路径。

考虑一个 table foo,它有一个自动递增 int 的主键行。

fooid|Column1|Column2...
------------------
1
2

接下来考虑一个 table 栏,它(除其他外)有两列,每列包含返回到 foo 中的 id 的外键引用。

barId|fooRef1|Stuff|fooRef2
---------------------------

我正在尝试在 foo 和 bar 之间实现级联删除操作,这样如果 foo 中的一行被删除,bar 中包含该 ID(在任一列中)的任何行也会被删除。有一个检查约束,即给定行中的 fooRef 值不能相同。当我尝试在两个外键行中使用 "ON DELETE CASCADE" 实现级联删除时,我得到了关于循环和多个级联路径的相同部署错误。然后我尝试在 foo 的删除事件上实现触发器,在删除一行时,它将删除其他 table 中的所有行,外键设置为空。然而,在实现这一点时,当我删除检查约束和 "ON DELETE SET NULL" 中两行的条形图时,sql 仍然给我那个错误。

我知道最简单的解决方法是更改​​模型,以便我只有一个外键引用另一个 table,但这实际上不可行。我还能做些什么来解决这个问题?

作为参考,我从来没有真正弄清楚为什么会这样,但我通过仅在 2 个外键之一上包含删除级联来修复它

通过触发方式来完成您的任务,尝试使用任意值(例如 99999)设置值,并将其标记为父 table 中的删除键,这样事情才有意义 但数据将永远保留在子 table 中。 或

   1. set reference keys to null 
   2. Disable constraint
   3. Delete data in child tables having ref key as null
   4. Enable constraint
   5. Delete parent keys