5

次の列を持つ1つの単純なテーブルがあります:id、name、parentID

単純なツリーのように、 idparentIDの間の関係図を同じテーブルに作成しましたが、ユーザーカスケード削除を試みたときに無効になりました

親を削除すると子が削除されるので、再帰的に削除されることはわかっています。

トリガーなしでカスケード削除できるオプションはありますか?

4

3 に答える 3

5

いいえ、SQL Server では、再帰パスや複数のカスケード パスを使用できません。

ストアド プロシージャを使用してビット単位で削除するか、トリガーを使用できます。ごめん。

于 2009-09-16T15:48:09.197 に答える
1

複数のアクションに対して after トリガーを使用することをお勧めします。

于 2009-09-16T15:58:10.983 に答える
1

あなたのために働くかもしれない1つのオプション:

  • ParentID と ChildID を別のテーブルに配置し、ParentID をベース テーブルから削除します。
  • ID のみに基づくカスケード削除 -->ParentID

問題は、子を削除しても親からのリンクが削除されず親を削除してもその子から孫へのリンクが削除されないことです。

ただし、ParentID と ChildID の両方に対して常に INNER JOIN を使用することで、アプリでこれを回避できます。そのため、Parent/Child テーブルに残っている毛羽立ちは無視されます。

その後、任意のタイミングでストアド プロシージャを実行して、親または子のいずれかが存在しない親子関係を一掃できます。単純な DELETE FROM parentchild WHERE NE(parent) OR NE(child) は再帰的ではないため、実行するたびにすすいで繰り返します。

于 2009-09-16T15:58:27.580 に答える