2009-09-16 96 views
3

我有一个简单的表,下列:ID,名称和的parentIDSQL Server中,级联删除和父/子表

我创建ID的parentID之间的关系图(在同一表),像简单的树,在同一个表,但是当我试图给用户级联删除对我来说是禁用

我知道,这将是递归删除,如果我将删除父它会删除自己的孩子

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

回答

3

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

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

1

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

+0

使用递归CTE中的DELETE – 2009-09-16 17:49:13

1

一个选项可以为你工作:

  • 广场PARENTID和childID的在一个单独的表,从基表
  • 级联删除PARENTID删除完全基于ID - > PARENTID

问题是,当你删除一个孩子时,你不会删除其父母的的链接,并且当你删除一个父母时,你将不会删除任何链接其子孙到任何孙子。

但是,您可以随时使用INNER JOIN对阵双方PARENTID和childID的解决这个问题在你的应用程序,所以在父/子表中的任何剩余的绒毛都将被忽略。

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