コメントでリンクした回答
、うまくいけば明らかにしたように、私たちは悪用しています MERGE
ここに示したクエリは、簡単に次のように置き換えることができます:
insert into T(Col1) select Col1 from T where ID = 123
ただし、OUTPUTを追加できるようにする場合コード> 句
、およびその OUTPUT
句は、新しく挿入されたデータ と の両方を参照する必要があります ソーステーブルからのデータ、INSERT
でそのような句を書くことは許可されていません
そのため、代わりに MERGE
を使用します ステートメントですが、意図した目的ではありません。全体の目的は、強制的に INSERT
を実行することです OUTPUT
を記述します
MERGE
のドキュメントを調べると、
、 INSERT
を実行するように指定できる唯一の句であることがわかります WHEN NOT MATCHED [BY TARGET]
にあります 句 - WHEN MATCHED
の両方で および ソースが一致しない場合
句、唯一のオプションは UPDATE
です または DELETE
.
したがって、MERGE
を記述する必要があります。 マッチングが常に失敗するように - 最も簡単な方法は、1 =0
の場合にマッチングが発生するようにすることです。 - 願わくば、決してそうではありません。
SQL Server は ブール値リテラル をサポートしていないため