Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa saya memerlukan bagian 'cocok' dari gabungan SQL, dalam skenario ini?

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat daftar yang dipisahkan koma menggunakan kueri SQL?

  2. SQL Server:JIKA ADA secara besar-besaran memperlambat kueri

  3. Masalah Pembulatan SQL Server di mana ada 5

  4. Dapatkan skema kolom tabel SQL dengan Tipe Data dan Panjang Maks dalam nilai angka

  5. Tabel Periksa SQL Server Dipartisi