我有一个包含以下列的简单表: id, name and parentID
我在同一个表上创建了 id 和 parentID 之间的关系图(在同一个表上),就像简单的树一样,但是当我尝试用户级联删除时,它对我来说是禁用的
我知道它将是递归删除,如果我将删除父母,它将删除他的孩子
我有没有触发器的安全级联删除的任何选项?
不,SQL Server不允许递归和/或多个级联路径 .
您可以使用存储过程逐位删除,或使用触发器 . 抱歉 .
最好使用后触发器进行多个操作 .
一个可能适合您的选项:
将ParentID和ChildID放在单独的表中,从基表中删除ParentID
仅基于ID - > ParentID进行级联删除
问题是,当您删除子项时,您不会从其父项中删除该链接,并且当您删除父项时,您不会删除其子项中任何孙子项的链接 .
但是,您可以通过对ParentID和ChildID使用INNER JOIN来解决此问题,因此将忽略Parent / Child表中的任何剩余绒毛 .
然后,您可以在任何定时的基础上运行存储过程,以清除父项或子项不存在的父/子关系 . 每次运行时都要冲洗并重复,因为简单的DELETE FROM父级WHERE NE(父级)或NE(子级)将不会递归 .
3 回答
不,SQL Server不允许递归和/或多个级联路径 .
您可以使用存储过程逐位删除,或使用触发器 . 抱歉 .
最好使用后触发器进行多个操作 .
一个可能适合您的选项:
将ParentID和ChildID放在单独的表中,从基表中删除ParentID
仅基于ID - > ParentID进行级联删除
问题是,当您删除子项时,您不会从其父项中删除该链接,并且当您删除父项时,您不会删除其子项中任何孙子项的链接 .
但是,您可以通过对ParentID和ChildID使用INNER JOIN来解决此问题,因此将忽略Parent / Child表中的任何剩余绒毛 .
然后,您可以在任何定时的基础上运行存储过程,以清除父项或子项不存在的父/子关系 . 每次运行时都要冲洗并重复,因为简单的DELETE FROM父级WHERE NE(父级)或NE(子级)将不会递归 .