sql >> データベース >  >> RDS >> Sqlserver

このシナリオで、SQL マージの「一致」部分が必要なのはなぜですか?

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




    1. CREATE OR REPLACEを使用するにはどうすればよいですか?

    2. Postgres sql関数で名前付きパラメーターを参照するにはどうすればよいですか?

    3. NVD3.jsで使用するためのMYSQLPDOからのカスタムフォーマットされたJSON

    4. 月のみを使用したjava.util.Date型からのSpringBoot+ SpringDataJPAクエリ