次の表があります。
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 ではどうなるでしょうか?
ありがとう。