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

Solusi untuk INSERT ATAU UPDATE di SQL Server

jangan lupa tentang transaksi. Performanya bagus, tetapi pendekatan sederhana (JIKA ADA..) sangat berbahaya.
Ketika beberapa utas mencoba melakukan Sisipkan-atau-perbarui, Anda dapat dengan mudah mendapatkan pelanggaran kunci utama.

Solusi yang diberikan oleh @Beau Crawford &@Esteban menunjukkan ide umum tetapi rawan kesalahan.

Untuk menghindari kebuntuan dan pelanggaran PK Anda dapat menggunakan sesuatu seperti ini:

begin tran
if exists (select * from table with (updlock,serializable) where key = @key)
begin
   update table set ...
   where key = @key
end
else
begin
   insert into table (key, ...)
   values (@key, ...)
end
commit tran

atau

begin tran
   update table with (serializable) set ...
   where key = @key

   if @@rowcount = 0
   begin
      insert into table (key, ...) values (@key,..)
   end
commit tran


  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 Mengabaikan kesalahan Kunci Duplikat di T-SQL (SQL Server)

  2. Pertimbangan Keamanan SQL Server

  3. Perbaiki "Kesalahan overflow aritmatika mengonversi IDENTITAS ke tipe data ..." di SQL Server

  4. Terapkan fungsionalitas paging (lewati / ambil) dengan kueri ini

  5. Menjalankan prosedur tersimpan yang dijadwalkan pada SQL server