Ваше предположение является правильным, это - оптимальный способ сделать это, и это звонило upsert/merge.
Важность UPSERT - с sqlservercentral.com :
Для каждого обновления в случае упомянул выше, мы удаляем одно дополнительное чтение из таблицы, если мы используем UPSERT вместо, СУЩЕСТВУЕТ. К сожалению для Вставки и UPSERT и ЕСЛИ СУЩЕСТВУЕТ методы, используют то же количество чтений на таблице. Поэтому проверка на существование должна только быть сделана, когда существует очень допустимая причина выровнять по ширине дополнительный ввод-вывод. Оптимизированный способ сделать вещи состоят в том, чтобы удостовериться, что у Вас есть мало чтений как возможное на DB.
лучшая стратегия состоит в том, чтобы делать попытку обновления. Если никакие строки не затронуты обновлением, тогда вставляют. При большинстве обстоятельств будет уже существовать строка, и только один ввод-вывод будет требоваться.
Редактирование : проверьте этот ответ и связанное сообщение в блоге для приобретения знаний о проблемах с этим шаблоном и как заставить его работать безопасный.
Go to Tools|Options, then select Keyboard under the Environment tree. In the listbox in the window, locate the Debug.Start command - you should see that it is mapped to the F5 key.
Click the Remove button to unmap the key.
Tools -> Options -> Environment -> keyboard
then below "Show commands containing" label type 'debug.start' w/o quotes