Найдено результатов: 1

Вставляйте обновление хранимой процедуре на сервере SQL

Я написал сохраненный proc, который будет выполнять обновление, если запись существует, в противном случае он будет выполнять вставку. Это выглядит примерно так:

update myTable set Col1=@col1, Col2=@col2 where ID=@ID
if @@rowcount = 0
insert into myTable (Col1, Col2) values (@col1, @col2)

Моя логика написания его таким образом заключается в том, что обновление будет выполнять неявный выбор с помощью предложения where, и если это возвращает 0, то вставка будет иметь место.

Альтернативой этому способу было бы сделать выбор, а затем на основе количества возвращенных строк либо выполнить обновление, либо вставить. Это я посчитал неэффективным, потому что если вы собираетесь сделать обновление, это вызовет 2 выбора (первый явный вызов select и второй неявный в where обновления). Если бы proc должен был сделать вставку, то не было бы никакой разницы в эффективности.

Разве моя логика здесь верна? Это то, как вы бы объединили вставку и обновление в сохраненный proc?

sql   sql-server   stored-procedures   upsert    

464   9   19:44, 11th August, 2020