SQL Server 2008中表的分层删除

时间:2012-02-21 07:08:08

标签: sql sql-server-2008

我有一张表ParentTable,其中parentId为主键。

现在我有三个子表ChildTable1ChildTable2ChildTable3

    ChildTable1
  • ,主键为ch1Id,外键为fkparentId(来自ParentTable的pk)

  • ChildTable2
  • ,主键为ch2Id,外键为fkparentIdfkch1Id(来自ChildTable1的主键)

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

这样下去......

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

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

我有一个模糊的想法,就像这样做

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

然后继续到ChildTable2进行删除,依此类推。希望我说清楚。

1 个答案:

答案 0 :(得分:2)

通过在外键定义上设置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;