Napisałem przechowywany proces, który dokona aktualizacji, jeśli istnieje rekord, w przeciwnym razie dokona wstawienia. Wygląda mniej więcej tak:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
Moja logika stojąca za pisaniem tego w ten sposób jest taka, że aktualizacja przeprowadzi niejawną selekcję przy użyciu klauzuli where i jeśli zwróci ona 0, nastąpi wstawienie.
Alternatywą dla zrobienia tego w ten sposób byłoby dokonanie wyboru, a następnie na podstawie liczby zwróconych wierszy albo zaktualizuj, albo wstaw. Uznałem to za nieefektywne, ponieważ jeśli masz wykonać aktualizację, spowoduje to 2 wybory (pierwsze jawne wywołanie wyboru i drugie niejawne w miejscu aktualizacji). Gdyby proc miał wykonać wstawkę, nie byłoby różnicy w wydajności.
Czy moja logika brzmi tutaj? Czy w ten sposób można połączyć wstawkę i aktualizację w przechowywany proces?