Предположението ви е правилно, това е оптималният начин да го направите и се нарича upsert/merge.
Значение на UPSERT - от sqlservercentral.com:
За всяка актуализация в споменатия по-горе случай премахваме едно допълнително четене от таблицата, ако използваме UPSERT вместо EXISTS. За съжаление за вмъкване, методите UPSERT и IF EXISTS използват един и същ брой четения на таблицата. Следователно проверката за съществуване трябва само да се направи, когато има всякаква основателна причина да оправдае допълнителния I/O. Оптимизираният начин да направите нещата е да се уверите, че имате възможно най-малко четения в DB.
Най-добрата стратегия е да опитате актуализацията. Ако няма редове, засегнати от актуализацията, тогава вмъкнете. В повечето обстоятелства редът вече ще съществува и ще се изисква само един I/O.
Редактиране :Моля, разгледайте този отговор и свързаната публикация в блога, за да научите за проблемите с този модел и как да го накарате да работи безопасно.