Ich habe einen gespeicherten Prozess geschrieben, der ein Update ausführt, wenn ein Datensatz vorhanden ist, andernfalls wird ein Insert ausgeführt. Es sieht ungefähr so aus:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
Meine Logik hinter dem Schreiben auf diese Weise ist, dass das Update eine implizite Auswahl unter Verwendung der where-Klausel ausführt. Wenn diese 0 zurückgibt, erfolgt die Einfügung.
Die Alternative dazu wäre, eine Auswahl zu treffen und dann basierend auf der Anzahl der zurückgegebenen Zeilen entweder eine Aktualisierung oder eine Einfügung durchzuführen. Dies habe ich als ineffizient angesehen, da bei einem Update zwei Auswahlen durchgeführt werden (der erste explizite Auswahlaufruf und der zweite implizit im Wo des Updates). Wenn der Proc eine Einfügung machen würde, gäbe es keinen Unterschied in der Effizienz.
Ist meine Logik hier? Würden Sie auf diese Weise eine Einfügung und ein Update in einem gespeicherten Prozess kombinieren?