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.