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
我四处寻找这个问题的答案,但我在尝试在我正在使用的数据库模型中的两个特定 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