7

次のステートメントでは、以前f1の値を常に取得しますf2か? またはf2、最初に更新されて終了することf1がありNULLますか?レコードの処理中に古い値を持つステートメント内で新しい値を使用できないという印象を受けていますが、f2これを述べている信頼できる場所が見つかりません。

UPDATE x
SET
    x.f1 = x.f2,
    x.f2 = NULL
4

2 に答える 2

6

概念的には、操作は「一度に」行われるため、「前」の値が使用されます

それはそう

UPDATE x
SET
 x.f1 = x.f2,
 x.f2 = x.f1

2つの列の値を交換することもできます。

于 2012-07-25T16:05:19.863 に答える
2

f1は常にf2の前に の以前の値を取得しUPDATEます。

技術的に言えば、レコードは削除され、再挿入されます。そのため、SQL は新しいレコードがどうあるべきかを判断し、現在のレコードを削除してから、新しいレコードを挿入します。

SQL トリガーに関するこの記事は、次の説明に役立つ場合があります。

削除されたテーブルには、DELETE および UPDATE ステートメント中に影響を受ける行のコピーが格納されます。DELETE または UPDATE ステートメントの実行中に、行はトリガー テーブルから削除され、削除されたテーブルに転送されます。削除されたテーブルとトリガー テーブルには、通常、共通の行はありません。

挿入されたテーブルには、INSERT および UPDATE ステートメント中に影響を受ける行のコピーが格納されます。挿入または更新トランザクション中に、挿入されたテーブルとトリガー テーブルの両方に新しい行が追加されます。挿入されたテーブルの行は、トリガー テーブルの新しい行のコピーです。

http://msdn.microsoft.com/en-us/library/ms191300.aspx

于 2012-07-25T15:58:59.820 に答える