Din antagelse er rigtig, dette er den optimale måde at gøre det på, og det kaldes upsert/merge.
Vigtigheden af UPSERT - fra sqlservercentral.com:
For hver opdatering i ovennævnte tilfælde fjerner vi en ekstra læsning fra tabellen, hvis vi bruger UPSERT i stedet for EXISTS. Desværre for en Insert bruger både UPSERT- og IF EXISTS-metoderne det samme antal læsninger på bordet. Derfor bør kontrollen for eksistens kun gøres, når der er enhver gyldig grund til at retfærdiggøre den yderligere I/O. Den optimerede måde at gøre tingene på er at sikre, at du har så få læsninger som muligt på DB.
Den bedste strategi er at forsøge at opdatere. Hvis ingen rækker er berørt af opdateringen, så indsæt. I de fleste tilfælde vil rækken allerede eksistere, og kun én I/O vil være påkrævet.
Rediger :Tjek venligst dette svar og det linkede blogindlæg for at lære om problemerne med dette mønster, og hvordan du får det til at fungere sikkert.