sql >> Databáze >  >> RDS >> Sqlserver

Řešení pro INSERT OR UPDATE na SQL Server

nezapomeňte na transakce. Výkon je dobrý, ale jednoduchý (IF EXISTS..) přístup je velmi nebezpečný.
Když se několik vláken pokusí provést vložení nebo aktualizaci, můžete snadno dojít k porušení primárního klíče.

Řešení poskytovaná @Beau Crawford &@Esteban ukazují obecný nápad, ale jsou náchylná k chybám.

Abyste se vyhnuli zablokování a porušení PK, můžete použít něco takového:

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

nebo

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

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


  1. (Čeština) Jak používat Oracle Database 19c Pre-Built Developer VM

  2. Výpočet vzdálenosti mezi dvěma body (zeměpisná šířka, délka)

  3. Jak vytvořit tabulku pomocí databáze sqlite v Androidu?

  4. Získejte počet dní v měsíci v PostgreSQL