Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Какви са предимствата на MERGE пред простото IF EXISTS?

MERGE съчетава логиката INSERT, UPDATE и DELETE в един DML израз и следователно е атомарна. Ако правите едноредови UPSERTS, тогава предимствата са по-малко очевидни. Например едно просто изпълнение на UPSERT може да изглежда по следния начин:

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

Въпреки това, без да опаковате това в транзакция, е възможно редът, който ще актуализираме, да бъде изтрит между SELECT и UPDATE. Добавянето на минимална логика за справяне с този проблем ни дава следното:

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

Тази логика не е необходима с оператора MERGE.

Няма сравнения, които трябва да се правят между CURSORS и оператора 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. SQL Server, преобразуващ varbinary в низ

  2. Индекс на SQL Server Обратно сканиране:разбиране, настройка

  3. каква е разликата между клъстерен индекс и уникален индекс?

  4. SQL Server 2008 Spatial:намерете точка в многоъгълник

  5. Използване на SolarWinds Serv-U на Linux с база данни за удостоверяване на SQL Server