Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rozwiązania dla INSERT OR UPDATE w SQL Server

nie zapomnij o transakcjach. Wydajność jest dobra, ale proste podejście (JEŻELI ISTNIEJE...) jest bardzo niebezpieczne.
Gdy wiele wątków próbuje wykonać operację wstawiania lub aktualizowania, można łatwo uzyskać naruszenie klucza podstawowego.

Rozwiązania dostarczone przez @Beau Crawford i @Esteban pokazują ogólny pomysł, ale podatne na błędy.

Aby uniknąć zakleszczeń i naruszeń PK, możesz użyć czegoś takiego:

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

lub

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. SQL Server - sprzężenie wewnętrzne podczas aktualizacji

  2. Przykład prostej instrukcji scalania w SQL Server

  3. Automatyzacja przetwarzania modelu tabelarycznego baz danych usług Analysis Services (SSAS) w programie SQL Server

  4. 3 sposoby uzyskania etapów zadania zadania agenta serwera SQL (T-SQL)

  5. Jakie są najlepsze praktyki dotyczące używania identyfikatora GUID jako klucza podstawowego, szczególnie w odniesieniu do wydajności?