sql >> Database teknologi >  >> RDS >> Sqlserver

Løsninger til INSERT OR UPDATE på SQL Server

glem ikke transaktioner. Ydeevnen er god, men enkel (HVIS FINDER ..) tilgang er meget farlig.
Når flere tråde forsøger at udføre Indsæt-eller-opdater, kan du nemt få primærnøglebrud.

Løsninger leveret af @Beau Crawford &@Esteban viser en generel idé, men fejltilbøjelige.

For at undgå dødvande og PK-overtrædelser kan du bruge noget som dette:

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

eller

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

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


  1. SQL-serverlogforsendelse og installation og konfiguration -4

  2. SET NULL:Angiv en streng, der skal returneres, når der forekommer en nulværdi i SQLcl / SQL*Plus

  3. Sjovt med (columnstore) komprimering på et meget stort bord – del 3

  4. Oracle Konverter sekunder til timer:minutter:sekunder