次のステートメントでは、以前f1
の値を常に取得しますf2
か? またはf2
、最初に更新されて終了することf1
がありNULL
ますか?レコードの処理中に古い値を持つステートメント内で新しい値を使用できないという印象を受けていますが、f2
これを述べている信頼できる場所が見つかりません。
UPDATE x
SET
x.f1 = x.f2,
x.f2 = NULL
次のステートメントでは、以前f1
の値を常に取得しますf2
か? またはf2
、最初に更新されて終了することf1
がありNULL
ますか?レコードの処理中に古い値を持つステートメント内で新しい値を使用できないという印象を受けていますが、f2
これを述べている信頼できる場所が見つかりません。
UPDATE x
SET
x.f1 = x.f2,
x.f2 = NULL
f1
は常にf2
の前に の以前の値を取得しUPDATE
ます。
技術的に言えば、レコードは削除され、再挿入されます。そのため、SQL は新しいレコードがどうあるべきかを判断し、現在のレコードを削除してから、新しいレコードを挿入します。
SQL トリガーに関するこの記事は、次の説明に役立つ場合があります。
削除されたテーブルには、DELETE および UPDATE ステートメント中に影響を受ける行のコピーが格納されます。DELETE または UPDATE ステートメントの実行中に、行はトリガー テーブルから削除され、削除されたテーブルに転送されます。削除されたテーブルとトリガー テーブルには、通常、共通の行はありません。
挿入されたテーブルには、INSERT および UPDATE ステートメント中に影響を受ける行のコピーが格納されます。挿入または更新トランザクション中に、挿入されたテーブルとトリガー テーブルの両方に新しい行が追加されます。挿入されたテーブルの行は、トリガー テーブルの新しい行のコピーです。