首页 文章

sql server,级联删除和父/子表

提问于
浏览
3

我有一个包含以下列的简单表: id, name and parentID

我在同一个表上创建了 idparentID 之间的关系图(在同一个表上),就像简单的树一样,但是当我尝试用户级联删除时,它对我来说是禁用的

我知道它将是递归删除,如果我将删除父母,它将删除他的孩子

我有没有触发器的安全级联删除的任何选项?

3 回答

  • 1

    不,SQL Server不允许递归和/或多个级联路径 .

    您可以使用存储过程逐位删除,或使用触发器 . 抱歉 .

  • 3

    最好使用后触发器进行多个操作 .

  • 1

    一个可能适合您的选项:

    • 将ParentID和ChildID放在单独的表中,从基表中删除ParentID

    • 仅基于ID - > ParentID进行级联删除

    问题是,当您删除子项时,您不会从其父项中删除该链接,并且当您删除父项时,您不会删除其子项中任何孙子项的链接 .

    但是,您可以通过对ParentID和ChildID使用INNER JOIN来解决此问题,因此将忽略Parent / Child表中的任何剩余绒毛 .

    然后,您可以在任何定时的基础上运行存储过程,以清除父项或子项不存在的父/子关系 . 每次运行时都要冲洗并重复,因为简单的DELETE FROM父级WHERE NE(父级)或NE(子级)将不会递归 .

相关问题