J'ai écrit un proc stocké qui fera une mise à jour si un enregistrement existe, sinon il fera 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)
Ma logique derrière l'écriture de cette manière est que la mise à jour effectuera une sélection implicite en utilisant la clause where et si cela renvoie 0, l'insertion aura lieu.
L'alternative à faire de cette façon serait de faire une sélection, puis en fonction du nombre de lignes renvoyées, faire une mise à jour ou une insertion. Cela a été jugé inefficace car si vous devez faire une mise à jour, cela entraînera 2 sélections (le premier appel de sélection explicite et le second implicite dans le lieu de la mise à jour). Si le proc faisait un insert, il n'y aurait aucune différence d'efficacité.
Ma logique est-elle valable ici? Est-ce ainsi que vous combineriez une insertion et une mise à jour dans un processus stocké?