1

次の表があります。

MyTree(IDNode, IDRootNode, IDParentNode, Left, Right, Depth, ...)

IDNode は、ノードを識別する主キーです。IDRootNode はルート ノードです。IDParentNode はノードの親ノードです。Left と Right はノードの位置です。削除には重要ではありません。

次のコードは、自己参照テーブルからレジスタを削除できるトリガーです。

CREATE TRIGGER MyTable_OnDelete ON MyTable
INSTEAD OF DELETE
AS 
BEGIN

  SET NOCOUNT ON;

  DELETE FROM mt
  FROM   deleted AS D
  JOIN   MyTable AS mt
  ON     d.Id = mt.ParentId

  DELETE FROM mt
  FROM   deleted AS D
  JOIN   MyTable AS mt
  ON     d.Id = mt.Id

END

私が間違っていなければ、最初に削除したいノードの子を削除し、後でノードを削除します。しかし、子に子がある場合、それも削除されますか、それともノードの子のみを削除し、子の子は削除しませんか?

そして、再帰的な CTE ではどうなるでしょうか?

ありがとう。

4

2 に答える 2

2

ツリー内の各ノードの IDRootNode 列に、ノードが属するツリーの ID が入力されている場合、次の SQL を使用してツリーを削除できます。

DELETE MyTable WHERE IDRootNode = @RootNodeId
于 2013-04-11T20:36:51.200 に答える