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

时间:2009-09-16 15:42:48

标签: sql sql-server sql-server-2005 tsql cascading-deletes

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

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

我知道如果我将删除父母将删除他的孩子

将是递归删除

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

3 个答案:

答案 0 :(得分:3)

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

您可以使用存储过程逐位删除,或使用触发器。遗憾。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

可能为您工作的一个选项:

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

问题在于,当您删除子项时,您不会从其父项中删除链接,当您删除父项时,您不会删除中的任何链接< / em>将孩子送给任何孙子女。

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

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