実行中に制約に違反するストアドプロシージャ内にSQL Serverの更新ステートメントがありますが、更新ステートメント全体が完了すると制約が有効です。特定の順序でSQL Serverの更新を実行する方法?
文は次のとおりです。
UPDATE SomeTable SET FieldA = 1 WHERE FieldB = @SomeFieldBValue;
行テーブルSomeTableで親行を参照する子行との階層関係を形成します。この制約により、すべての子行にFieldAが非NULL値に設定されていない限り、親行はFieldAを非NULL値に設定できません。更新ステートメントが行1は、FIELDA以外に設定されていることは許されないので、それが制約違反で失敗し実行したときに今
Id | ParentId | FieldA | FieldB
-- | -------- | ------ | ------
1 | NULL | NULL | 123
2 | 1 | NULL | 123
:
したがって、たとえば、のはSomeTableには、以下のデータが含まれていることを想定してみましょうすべての子がFieldAをnull以外の値に設定していない限り、null値です。
この制約を一時的に無効にすることは、ユーザーにこれを許可する権限がないため、オプションではありません。
更新ステートメントは何らかの順序で処理されません。これは、セットベースの操作です。ここで2つの別々の更新ステートメントを実行する必要があります。 –
ありがとうございます。注文の前提条件を削除する質問を編集しました。 – flange