Saya bertanya-tanya apakah Anda telah menemukan perintah T-SQL yang mirip dengan konsep UPSERT? Melakukan operasi INSERT | UPDATE menggunakan opsi (1) atau (2) tampaknya terlalu kompleks dan rawan kesalahan.
OBJEKTIF
Untuk memastikan bahwa catatan yang diinginkan (dalam hal ini employee_id 1) mutakhir TANPA harus harus pada dasarnya menulis permintaan yang sama dua kali.
KONTEKS
- nama tabel: karyawan
- id karyawan: memiliki kunci utama, dan proerty identitas disetel ke true
PILIHAN
jalankan SQL UPDATE ... centang @@ rowcount = 0 dan @@ error = 0 ... jalankan SQL INSERT jika diperlukan
- con: Anda secara efektif harus menulis permintaan yang sama dua kali, sekali sebagai sisipan, sekali sebagai pembaruan
- con: lebih banyak kode = lebih banyak mengetik waktu
- con: lebih banyak kode = lebih banyak ruang untuk kesalahan
/programming/1106717/how-to-implement-a-conditional-upsert-stored-procedure "Perbarui menggunakan @@ rowcount"
- jalankan SQL MERGE
- con: Anda secara efektif harus menulis permintaan yang sama dua kali, sekali sebagai sisipan, sekali sebagai pembaruan
- con: lebih banyak kode = lebih banyak mengetik waktu
- con: lebih banyak kode = lebih banyak ruang untuk kesalahan
http://technet.microsoft.com/en-us/library/bb510625.aspx "T-SQL Merge"
- jalankan SQL UPSERT (fitur tidak ada)
- pro: Anda mendefinisikan hubungan data-ke-tabel satu kali (biarkan SQL Server khawatir tentang apakah itu INSERT atau UPDATE)
- pro: less code = implementasi lebih cepat
- pro: kode kurang = probabilitas lebih rendah
CONTOH UPSERT
Karyawan UPSERT (employee_id, employee_number, job_title, first_name, middle_name, nama keluarga, modified_at) VALUES (1, '00 -124AB37 ',' Manajer ',' John ',' T ',' Smith ', GetDate ());
- jika employee_id 1 tidak ada: MS SQL menjalankan pernyataan INSERT
- jika ada employee_id 1: MS SQL mengeksekusi dan pernyataan UPDATE
sumber
MERGE
mudah, fleksibel, dan juga merupakan bagian dari SQL Standard. Masalah sebenarnya denganMERGE
danUPSERT
implementasi lainnya adalah eskalasi kunci potensial atau bahkan kebuntuan yang tidak ada hubungannya dengan sintaksis.MERGE
implementasi dalam SQL Server.Jawaban:
Saya pikir jawaban sederhana untuk ini adalah tidak.
MERGE
adalah jawaban Microsoft untukUPSERT
logika yang lebih berbelit-belit . Dan Anda bahkan tidak mencantumkan pendekatan terburuk:Saya baru saja muntah di mulut saya mengetik itu, tapi sebenarnya itu yang paling sering saya lihat.
Bagaimanapun, jika
MERGE
tidak fleksibel atau cukup kuat untuk Anda, saya sarankan Anda mengirimkan permintaan fitur ke Microsoft di http://connect.microsoft.com/sql/ dan menjelaskan, secara menyeluruh, kasus bisnis Anda. Selama Anda tetap menggunakan keuntungan nyata dari sintaks yang Anda usulkanMERGE
, Anda mendapat suara saya. Jika Anda menggantung terlalu banyak pada bagian "rawan kesalahan", saya cenderung tidak akan membeli. Mengapa? Karena Anda bisa gemuk-pernyataan apa pun.Yang mengatakan, saya tidak berpikir ada yang bisa dilakukan orang di sini untuk Anda secara khusus. Anda harus menyelidiki potensi masalah dengan
MERGE
:http://www.mssqltips.com/sqlservertip/3074/use-caution-with-sql-servers-merge-statement/
sumber