Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

May 28, 2008 / by Zsolt Soczó

SQL Server UPSERT variációk 4.

Most jön az a megoldás, amelyik mind között a leggyorsabb, de egyúttal a legkevésbé szép. :)

create proc dbo.UpsertClient4
  @id int,
  @name nvarchar(100)
as
begin try
    insert dbo.Client (id, name) values (@id, @name)
end try
begin catch
    if (error_number() = 2627)
        update dbo.Client set name = @name where id = @id
end catch

Nekiszaladunk az insertnek, ám ha a sor létezik már adott id-vel, akkor visszapattanunk, és jön az update. Csak a constraint violation (2627) esetén jön az update, egyébként újra raise-elni kellene a hibát, ez nincs benne a példában.

Habár normál adatbázisoknál ez a megoldás jóval gyorsabb az előzőeknél, a hibakezelést könnyű elrontani, ezért észnél kell lenni a használata során. De ha a sebesség az úr, ezt a megoldást érdemes választani.

Emlékeztetőül a megoldások futási ideje, a kevesebb a jobb:

procid dur
———– ———–
1 152
2 161
3 164
4 64 <--- 5 186 [/source]

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.