MERGE kombinerer INSERT, UPDATE og DELETE logik i én DML-sætning og er derfor atomisk. Hvis du laver UPSERTS på en række, er fordelene mindre indlysende. For eksempel kan en naiv implementering af en UPSERT se ud som følger:
IF EXISTS (SELECT * FROM t1 where example@sqldat.com)
UPDATE t1 SET ... WHERE example@sqldat.com
ELSE
INSERT INTO t1 (...) VALUES (...)
Men uden at pakke dette ind i en transaktion, er det muligt, at den række, vi skal opdatere, bliver slettet mellem SELECT og OPDATERING. Tilføjelse af minimal logik for at løse dette problem giver os dette:
BEGIN TRAN
IF EXISTS (SELECT * FROM t1 WITH (HOLDLOCK, UPDLOCK) where example@sqldat.com )
UPDATE t1 SET ... WHERE example@sqldat.com
ELSE
INSERT INTO t1 (...) VALUES (...)
COMMIT
Denne logik er ikke nødvendig med MERGE-sætningen.
Der er ingen sammenligninger, der skal drages mellem CURSORS og MERGE-sætningen.