MERGE kombinuje logiku INSERT, UPDATE a DELETE do jednoho příkazu DML, a proto je atomický. Pokud děláte jednořadé UPSERTS, pak jsou výhody méně zřejmé. Například naivní implementace UPSERT může vypadat takto:
IF EXISTS (SELECT * FROM t1 where id=@id)
UPDATE t1 SET ... WHERE id=@id
ELSE
INSERT INTO t1 (...) VALUES (...)
Nicméně, aniž bychom to zabalili do transakce, je možné, že řádek, který budeme aktualizovat, bude smazán mezi SELECT a UPDATE. Přidání minimální logiky k vyřešení tohoto problému nám dává toto:
BEGIN TRAN
IF EXISTS (SELECT * FROM t1 WITH (HOLDLOCK, UPDLOCK) where id=@id )
UPDATE t1 SET ... WHERE id=@id
ELSE
INSERT INTO t1 (...) VALUES (...)
COMMIT
Tato logika není u příkazu MERGE nutná.
Mezi příkazem CURSORS a příkazem MERGE nejsou žádná srovnání, která by měla být provedena.