SQL Server中,级联删除和父/子表(sql server, cascade delete a

2019-07-18 05:38发布

我有一个简单的表列如下:ID,名称和的parentID

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

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

有我的ANABLE级联任何选项删除不触发?

Answer 1:

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

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



Answer 2:

最好能触发多个动作后使用。



Answer 3:

一种选择可能为你工作:

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

问题是,当你删除一个孩子,你不会其父删除链接,当你删除一个家长,你会不会删除其子女的任何孙子的任何链接。

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

然后,您可以运行在你想清理任何父/子关系,其中无论是父母或儿童不存在任何时间为基础的存储过程。 冲洗,每次运行时重复,因为一个简单的DELETE FROM WHERE父子NE(母)或NE(孩子)不会递归。



文章来源: sql server, cascade delete and parent/child table