4

以下のテーブルDISPLAY_TABは、親タブと子タブの両方を含むことができる自己参照テーブルです。親タブは複数の子タブを持つことができ、子タブは複数の親に属することができます。

メインテーブルと関係テーブルDISPLAY_TAB_GROUPINGの間に CASCADE DELETE 関係を確立したいので、親または子タブが削除されると、関係も自動的に削除されます (実際のタブレコードではなく関係のみ)。そのため、フィールド TAB_ID_R_1 および TAB_ID_R_2 テーブルのDISPLAY_TAB_GROUPINGにFOREIGN KEY 制約を作成し、 DISPLAY_TABテーブルの TAB_ID を参照しています。関係の 1 つに ON DELETE CASCADE を追加すると正常に動作しますが、両方で試してみると、「サイクルまたは複数のカスケード パスが発生する可能性があります」というエラーがスローされます。

両方の関係に対して ON CASCADE DELETE を設定するにはどうすればよいですか? これがどのようにサイクルを引き起こすのかわかりません-メインテーブルのレコードが削除されるたびに、関係テーブルの関連レコードのみを削除する必要があります.

ここに画像の説明を入力

4

1 に答える 1

4

このKB 記事を読んでください。これには、とりわけ次のように書かれています...

このエラー メッセージが表示されるのは、SQL Server では、DELETE ステートメントまたは UPDATE ステートメントのいずれかによって開始されるすべてのカスケード参照アクションのリストにテーブルを複数回表示できないためです。たとえば、カスケード参照アクションのツリーは、カスケード参照アクション ツリー上の特定のテーブルへのパスを 1 つだけ持つ必要があります。

必要なことを行うには、DISPLAY_TAB_GROUPING テーブルを 2 回表示する必要があります。代わりに、削除コードを実装するストアド プロシージャを使用することをお勧めします。

于 2013-11-11T16:14:52.890 に答える