sql >> Databasteknik >  >> RDS >> Sqlserver

Vilka är fördelarna med MERGE framför enkla OM FINNS?

MERGE kombinerar INSERT-, UPDATE- och DELETE-logik till en DML-sats och är därför atomär. Om du gör en rad UPSERTS är fördelarna mindre uppenbara. Till exempel kan en naiv implementering av en UPSERT se ut så här:

IF  EXISTS (SELECT * FROM t1 where [email protected])
    UPDATE t1 SET ... WHERE [email protected]
ELSE
    INSERT INTO t1 (...) VALUES (...)

Men utan att lägga in detta i en transaktion är det möjligt att raden vi ska uppdatera kommer att raderas mellan SELECT och UPPDATERING. Genom att lägga till minimal logik för att lösa problemet ger oss detta:

BEGIN TRAN
IF  EXISTS (SELECT * FROM t1 WITH (HOLDLOCK, UPDLOCK) where [email protected] )
    UPDATE t1 SET ... WHERE [email protected]
ELSE
    INSERT INTO t1 (...) VALUES (...)
COMMIT

Denna logik är inte nödvändig med MERGE-satsen.

Det finns inga jämförelser mellan CURSORS och MERGE-satsen.



  1. Hur gör man en säkerhetskopia från en Postgresql-DB via JDBC?

  2. Ta bort med Left Join i Oracle 10g

  3. Vilken MySQL-kollation är bäst för att acceptera alla unicode-tecken?

  4. Byt namn på vissa tabeller till Tabellnamn + DDMMYYYY