次の列を持つ1つの単純なテーブルがあります:id、name、parentID
単純なツリーのように、 idとparentIDの間の関係図を同じテーブルに作成しましたが、ユーザーカスケード削除を試みたときに無効になりました
親を削除すると子が削除されるので、再帰的に削除されることはわかっています。
トリガーなしでカスケード削除できるオプションはありますか?
次の列を持つ1つの単純なテーブルがあります:id、name、parentID
単純なツリーのように、 idとparentIDの間の関係図を同じテーブルに作成しましたが、ユーザーカスケード削除を試みたときに無効になりました
親を削除すると子が削除されるので、再帰的に削除されることはわかっています。
トリガーなしでカスケード削除できるオプションはありますか?
いいえ、SQL Server では、再帰パスや複数のカスケード パスを使用できません。
ストアド プロシージャを使用してビット単位で削除するか、トリガーを使用できます。ごめん。
複数のアクションに対して after トリガーを使用することをお勧めします。
あなたのために働くかもしれない1つのオプション:
問題は、子を削除しても親からのリンクが削除されず、親を削除してもその子から孫へのリンクが削除されないことです。
ただし、ParentID と ChildID の両方に対して常に INNER JOIN を使用することで、アプリでこれを回避できます。そのため、Parent/Child テーブルに残っている毛羽立ちは無視されます。
その後、任意のタイミングでストアド プロシージャを実行して、親または子のいずれかが存在しない親子関係を一掃できます。単純な DELETE FROM parentchild WHERE NE(parent) OR NE(child) は再帰的ではないため、実行するたびにすすいで繰り返します。