sql >> Databasteknik >  >> RDS >> Sqlserver

Lösningar för INFOGA ELLER UPPDATERA på SQL Server

glöm inte transaktioner. Prestanda är bra, men en enkel (OM FINNS ..) tillvägagångssätt är mycket farlig.
När flera trådar försöker utföra Infoga-eller-uppdatera kan du lätt få primärnyckelöverträdelse.

Lösningar från @Beau Crawford &@Esteban visar generella idéer men felbenägna.

För att undvika dödlägen och PK-kränkningar kan du använda något i stil med detta:

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. Hur man exporterar data från SQL Server 2005 till MySQL

  2. Oracle SQL:Använd sekvens i infogning med Select Statement

  3. Hur man väljer * men utan kolumnnamn måste vara unika i varje vy

  4. Vad är motsvarigheten till 'beskriv tabell' i SQL Server?