2012-02-21 85 views
0

我有一个表ParentTable,其中我有parentId作为主键。在SQL Server 2008中对表进行层级删除

现在我有三个子表ChildTable1,ChildTable2ChildTable3

  • ChildTable1

    ,主键是ch1Id和外键是fkparentId(PK从ParentTable

  • ChildTable2

    ,主键是ch2Id和外键是fkparentIdfkch1Id(从ChildTable1主键)

  • in ChildTable3,主键是ch3Id,外键是fkparentId, fkch1Idfkch2Id(来自ChildTable2的主键)。

而且这样下去..

我想编写一个查询以下列方式hierarchially删除这些表。

首先删除ChildTable3>然后删除ChildTable2>然后删除ChildTable1并最后删除ParentTable

我有这样类似

delete from ChildTable3 
where fkch2Id = ch2.ch2Id 
and fkch1Id = ch1.ch1Id 
and fkparentId = p.parentId 

则前进到ChildTable2删除等的一个模糊的概念。希望我明确表示。

+0

要从ChildTable3中删除哪些行?所有的行?满足ChildTable3中某些条件的行或满足其他表中某些条件的行? – 2012-02-21 07:18:46

+0

我想从ChildTable3和其他提到的表中删除所有行。 – 2012-02-21 07:23:03

+1

然后你只需要从ChildTable3中删除,然后从ChildTable2中删除等等,最后你从ParentTable中删除。无需加入其他表格。 – 2012-02-21 07:26:44

回答

2

通过在外键definitin上设置cascade on delete,可以在没有任何查询的情况下做同样的事情。

如果你没有在db上设置外键定义你可以像这样删除fkparentId上的记录。

declare @parentId int = 3 

delete from ChildTable3 where fkparentId = @parentId; 
delete from ChildTable2 where fkparentId = @parentId; 
delete from ChildTable1 where fkparentId = @parentId; 
delete from ParentTable where parentId = @parentId; 
+0

好的。我会试试这个。谢谢。 – 2012-02-21 07:31:06