5

テーブルBigTableとテーブルLittleTableがあります。一部のレコードのコピーをBigTableからLittleTableに移動してから、(これらのレコードの場合)BigTable.ExportedFlagをTに設定します(レコードのコピーがリトルテーブルに移動されたことを示します)。

1つのステートメントでこれを行う方法はありますか?

私は次の取引を行うことができることを知っています:

  1. where句に基づいて大きなテーブルからレコードを移動します
  2. これと同じwhere句に基づいてTにエクスポートされたビッグテーブル設定を更新します。

また、 MERGEステートメントも調べましたが、これは正しくないようです。小さなテーブルの値を変更したくないので、レコードを小さなテーブルに移動するだけです。

updateステートメントの後にOUTPUT句を調べましたが、有用な例が見つかりません。PinalDaveがInserted.ID, Inserted.TEXTVal, Deleted.ID, Deleted.TEXTValの代わりにを使用している理由がわかりませんUpdated.TextVal。更新は挿入または削除と見なされますか?

この投稿を見つけましたTSQL:UPDATE with INSERT INTO SELECT FROM "AFAIK、1つのSQLステートメントで2つの異なるテーブルを更新することはできません。"

これを行うための明確な単一のステートメントはありますか?正しく、保守可能なSQLステートメントを探しています。1つのトランザクションで2つのステートメントをラップする必要がありますか?

4

1 に答える 1

8

対象となる要件を満たしているOUTPUT限り、この条項を使用できます。LittleTableOUTPUT ... INTO

UPDATE BigTable
SET ExportedFlag = 'T'
OUTPUT inserted.Col1, inserted.Col2 INTO LittleTable(Col1,Col2)
WHERE <some_criteria>

INSERTEDまたはを使用しても違いはありませんDELETED。異なる列は、更新している列だけです(deleted.ExportedFlagbefore値があり、次のinserted.ExportedFlagようになりますT

于 2012-09-13T13:42:46.943 に答える