Dalam jawaban yang Anda tautkan di komentar
, seperti yang sudah saya jelaskan, kami menyalahgunakan MERGE pernyataan.
Kueri yang Anda tunjukkan di sini dapat dengan mudah diganti dengan:
insert into T(Col1) select Col1 from T where ID = 123
Namun, jika Anda ingin dapat menambahkan OUTPUT klausa
, dan OUTPUT . itu klausa perlu mereferensikan data yang baru dimasukkan dan data dari tabel sumber, Anda tidak diizinkan untuk menulis klausa seperti itu pada INSERT pernyataan.
Jadi, kami menggunakan MERGE pernyataan, tetapi tidak untuk tujuan yang dimaksudkan. Seluruh tujuannya adalah untuk memaksanya melakukan INSERT dan tulis OUTPUT kami klausa.
Jika kami memeriksa dokumentasi untuk MERGE
, kita melihat bahwa satu-satunya klausa yang dapat kita tentukan untuk melakukan INSERT ada di WHEN NOT MATCHED [BY TARGET] klausa - di kedua WHEN MATCHED dan WHEN NOT MATCHED BY SOURCE klausa, satu-satunya pilihan kami adalah UPDATE atau DELETE .
Jadi, kita harus menulis MERGE sedemikian rupa sehingga pencocokan selalu gagal - dan cara paling sederhana untuk melakukannya adalah dengan mengatakan bahwa pencocokan harus terjadi ketika 1 = 0 - yang, mudah-mudahan, tidak pernah.
Karena SQL Server tidak mendukung literal boolean