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
MERGE
mudah, fleksibel, dan juga merupakan bagian dari SQL Standard. Masalah sebenarnya dengan MERGE
dan UPSERT
implementasi lainnya adalah eskalasi kunci potensial atau bahkan kebuntuan yang tidak ada hubungannya dengan sintaksis.
MERGE
implementasi dalam SQL Server.