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

Apa keuntungan dari MERGE dibandingkan IF EXISTS yang sederhana?

MERGE menggabungkan logika INSERT, UPDATE dan DELETE menjadi satu pernyataan DML, dan karenanya bersifat atomik. Jika Anda melakukan UPSERTS baris tunggal maka keuntungannya kurang jelas. Misalnya, implementasi UPSERT yang naif mungkin terlihat seperti berikut:

IF  EXISTS (SELECT * FROM t1 where [email protected])
    UPDATE t1 SET ... WHERE [email protected]
ELSE
    INSERT INTO t1 (...) VALUES (...)

Namun, tanpa membungkus ini dalam sebuah transaksi, ada kemungkinan bahwa baris yang akan kita perbarui akan dihapus antara SELECT dan UPDATE. Menambahkan logika minimal untuk mengatasi masalah itu memberi kami ini:

BEGIN TRAN
IF  EXISTS (SELECT * FROM t1 WITH (HOLDLOCK, UPDLOCK) where [email protected] )
    UPDATE t1 SET ... WHERE [email protected]
ELSE
    INSERT INTO t1 (...) VALUES (...)
COMMIT

Logika ini tidak diperlukan dengan pernyataan MERGE.

Tidak ada perbandingan yang harus dibuat antara KURSOR dan pernyataan MERGE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Tampilan di SQL Server

  2. SQL Pivot Table dinamis

  3. Bagaimana saya bisa membuat batasan CHECK pada kolom VARCHAR di SQL Server yang menentukan panjang data minimum?

  4. Menghubungkan ke MS SQL Server dengan Otentikasi Windows menggunakan Python?

  5. Koneksi Sql menunggu 15 detik meskipun batas waktu 3 detik dalam string koneksi