Algo así:
Código SQL
[-]begin tran
update table with (serializable) set ... where key = @key
if @@rowcount = 0
begin
insert into table (key, ...) values (@key,..)
end
commit tran
También puedes hacer un insert en un try except y si falla entonces hacer el update
Código Delphi
[-]try
insert ...
except
update ...
end