parentid删除sql表中的所有子行

时间:2012-06-05 10:13:02

标签: sql sql-server rdbms cascading-deletes

我有一张桌子,我从中创建了一个包含多个级别和父级的树。表结构如下所示。

enter image description here

当我删除“TitleID”时,我希望删除所有孩子甚至孙子女。 在sql中最简单的方法是什么? 如果我使用“where ParentID = TitleID”进行简单删除,则只删除级别为1的子级。

2 个答案:

答案 0 :(得分:5)

DECLARE @TitleId INT 

SELECT @@TitleId = 2 

;WITH results AS( 
        SELECT  TitleId
        FROM    myTable 
        WHERE   TitleId = @TitleId 
        UNION ALL 
        SELECT  t.TitleId 
        FROM    myTable t 
                INNER JOIN ret r ON t.ParentID = r.TitleId
) 

DELETE FROM myTable WHERE TitleId IN (SELECT TitleId FROM    results )

答案 1 :(得分:1)

要处理关系数据库中的树结构化数据,您可以添加另一列FullID,其中包含1.1.3之类的值。那么你需要的只是一个简单的where子句WHERE FullID LIKE '1.1.%',如果你想删除节点1.1及其子节点。

FullID的值可以由存储过程(对于旧数据)生成,或者由应用程序生成(对于新数据)。