コメントでリンクした回答
、うまくいけば明らかにしたように、私たちは悪用しています 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 は ブール値リテラル をサポートしていないため