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