Jag använder detta:
begin tran;
update ... where ... ;
if @@rowcount = 0
insert ...
commit tran;
Som jag förstår det, med korrekta index på plats, placerar uppdateringen lämpliga intervalllås som skulle hindra andra från att infoga samma sak samtidigt.