我有一张表ParentTable
,其中parentId
为主键。
现在我有三个子表ChildTable1
,ChildTable2
和ChildTable3
。
ChildTable1
中,主键为ch1Id
,外键为fkparentId
(来自ParentTable
的pk)
ChildTable2
中,主键为ch2Id
,外键为fkparentId
和fkch1Id
(来自ChildTable1
的主键)
在ChildTable3
中,主键为ch3Id
,外键为fkparentId, fkch1Id
和fkch2Id
(来自ChildTable2
的主键)。
这样下去......
我想编写一个查询,以下列方式分层删除这些表。
首先删除ChildTable3
>然后删除ChildTable2
>然后删除ChildTable1
,最后删除ParentTable
。
我有一个模糊的想法,就像这样做
delete from ChildTable3
where fkch2Id = ch2.ch2Id
and fkch1Id = ch1.ch1Id
and fkparentId = p.parentId
然后继续到ChildTable2进行删除,依此类推。希望我说清楚。
答案 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;