J'ai écrit une procédure stockée qui effectue une mise à jour si un enregistrement existe, sinon elle effectue une insertion. Cela ressemble à quelque chose comme ceci :
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
La logique qui me pousse à l'écrire de cette façon est que la mise à jour effectuera une sélection implicite à l'aide de la clause where et que si elle renvoie 0, l'insertion aura lieu.
L'alternative à cette méthode serait d'effectuer une sélection, puis, en fonction du nombre de lignes retournées, de procéder à une mise à jour ou à une insertion. J'ai considéré cette méthode comme inefficace, car si vous effectuez une mise à jour, cela entraînera deux sélections (la première explicite et la seconde implicite dans le cas de la mise à jour). Si la proc devait faire une insertion, il n'y aurait aucune différence d'efficacité.
Ma logique est-elle bonne ? Est-ce ainsi que l'on combine une insertion et une mise à jour dans une procédure stockée ?