Eu escrevi um procedimento armazenado que fará uma atualização se houver um registro, caso contrário, fará uma inserção. É mais ou menos assim:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
Minha lógica por trás de escrever desta forma é que a atualização executará uma seleção implícita usando a cláusula where e se retornar 0, então a inserção ocorrerá.
A alternativa para fazer dessa maneira seria fazer uma seleção e, a seguir, com base no número de linhas retornadas, fazer uma atualização ou uma inserção. Isso eu considerei ineficiente porque se você for fazer uma atualização causará 2 selects (a primeira chamada select explícita e a segunda implícita no where da atualização). Se o proc fizesse uma inserção, não haveria diferença na eficiência.
Minha lógica está soando aqui? É assim que você combinaria uma inserção e uma atualização em um procedimento armazenado?