Ho scritto un proc memorizzato che farà un aggiornamento se esiste un record, altrimenti farà un inserimento. Assomiglia a questo:
update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)
La mia logica dietro a scriverlo in questo modo è che l'aggiornamento eseguirà una selezione implicita utilizzando la clausola where e se restituisce 0, l'inserimento avrà luogo.
L'alternativa a farlo in questo modo sarebbe eseguire una selezione e quindi, in base al numero di righe restituite, eseguire un aggiornamento o un inserimento. Questo l'ho considerato inefficiente perché se devi fare un aggiornamento causerà 2 selezioni (la prima chiamata di selezione esplicita e la seconda implicita nel dove dell'aggiornamento). Se il proc dovesse eseguire un inserimento, non ci sarebbe alcuna differenza di efficienza.
La mia logica suona qui? È questo il modo in cui combineresti un inserimento e un aggiornamento in un processo memorizzato?