5

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

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

我知道如果我要删除父级它将是递归删除它会删除他的孩子

我有什么选项可以在没有触发器的情况下进行级联删除吗?

4

3 回答 3

5

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

可以使用存储过程逐位删除,也可以使用触发器。对不起。

于 2009-09-16T15:48:09.197 回答
1

最好对多个操作使用后触发器。

于 2009-09-16T15:58:10.983 回答
1

一种可能适合您的选择:

  • 将 ParentID 和 ChildID 放在单独的表中,从基表中删除 ParentID
  • 仅基于 ID-->ParentID 的级联删除

问题是当你删除一个孩子时,你不会它的父级中删除链接,当你删除一个父级时,你不会删除它的孩子到任何孙子的任何链接。

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

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

于 2009-09-16T15:58:27.580 回答