2012-02-21 9 views
0

テーブルParentTable私はparentIdをプライマリキーとして持っています。SQL Server 2008のテーブルの階層削除

私は3つの子テーブルChildTable1,ChildTable2およびChildTable3を持っています。 ChildTable1

  • 、主キーはch1Idであり、外部キーがfkparentIdParentTableからPK)ChildTable2

  • で、主キーはch2Idであり、外部キーがfkparentIdfkch1IdChildTable1からプライマリキー)である

  • ChildTable3、プライマリキーはch3Id、外部キーはfkparentId, fkch1Idfkch2Id(主キーはChildTable2

そして、これは私が次のように階層構造でこれらのテーブルを削除するクエリを書きたい...

になります。

最初に削除するChildTable3>次にChildTable2を削除してからChildTable1を削除し、最後にParentTableを削除してください。

私はそのように上の削除のためにChildTable2に進むと

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

のようにこれを行うことの漠然とした考えを持っています。私はそれを明確にしたいと考えています。

+0

ChildTable3のどの行を削除しますか?すべての行? ChildTable3のいくつかの条件を満たす行、または他のテーブルの条件を満たす行? –

+0

ChildTable3と上記の他のテーブルからすべての行を削除します。 –

+1

それから、 'ChildTable3'から' delete from ChildTable2'などを削除し、最後に 'ParentTable'から削除するだけです。他のテーブルに参加する必要はありません。 –

答えて

2

外部キー定義でcascade on deleteを設定することで、クエリーなしで同じことができます。

データベースに外部キーを設定しないと、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

私はこれを試してみる。ありがとう。 –

関連する問題