2017-01-13 11 views
4

私は、テーブルにレコードを挿入または更新するMERGEを使用しています:MERGE文を使用するとOUTPUTが異なりますか?

MERGE INTO target 
USING SELECT * FROM @source 
WHEN MATCHED THEN 
UPDATE SET ...columns... 
WHEN NOT MATCHED THEN 
INSERT ...columns... 
OUTPUT inserted.* INTO @insertedRecord 

上記のステートメントは、更新を実行する場合は、更新されたレコードは、テーブル変数に挿入されるのでしょうか?

答えて

2

$actionあなたにアクションタイプが表示されます。

inserted.*は、更新された値と挿入された行の値を提供します。

deleted.*は、削除された行の更新と値の古い値を提供します。

あなたは

OUTPUT $action, inserted.*, deleted.*, @source.* into #changes 

一時テーブルにこれを押すと、あなたが探している結果を得るためにそれに仕事をしたいかもしれません。

3

はい。

psuedotableは、挿入または更新されたときにテーブルに入る新しい値を処理します。

deleted pseudotableは、削除されたか更新されたかに関係なく、古い値を扱います(更新の場合は、前の値になります)。

さらに、マージでソーステーブルを参照することもできます(例: OUTPUT @source.*(動作するにはエイリアスが必要な場合もあります)。

+0

更新時の記録を完了するために出力する方法はありますか? (変更されていない列と変更された列)? –

+0

挿入済み。*は、挿入されたテーブルのすべての列を含む必要があります。 –

関連する問題