Ich benutze das:
begin tran;
update ... where ... ;
if @@rowcount = 0
insert ...
commit tran;
Wie ich es verstehe, setzt das Update mit den richtigen Indizes richtige Bereichssperren, die andere daran hindern würden, dasselbe gleichzeitig einzufügen.