Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jakie są zalety MERGE nad prostym JEŻELI ISTNIEJE?

MERGE łączy logikę INSERT, UPDATE i DELETE w jedną instrukcję DML i dlatego jest niepodzielna. Jeśli robisz UPSERTS jednorzędowe, korzyści są mniej oczywiste. Na przykład naiwna implementacja UPSERT może wyglądać następująco:

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

Jednak bez pakowania tego w transakcję jest możliwe, że wiersz, który zamierzamy zaktualizować, zostanie usunięty między SELECT a UPDATE. Dodanie minimalnej logiki w celu rozwiązania tego problemu daje nam to:

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

Ta logika nie jest konieczna w przypadku instrukcji MERGE.

Nie ma porównań między CURSORS a instrukcją MERGE.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można przejść do procedury składowanej na zdalnym serwerze SQL Server 2008

  2. SQL Server odpowiednik PostgreSQL odrębne na ()

  3. SSIS upuszcza rekord podczas importu źródła plików płaskich

  4. Zdarzenia oczekiwania serwera SQL -3

  5. Najpierw zamów według określonego identyfikatora, a następnie według odpoczynku