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

Мога ли да използвам оператора MERGE в SQL Server 2005?

MERGE беше въведен в SQL Server 2008. Ако искате да използвате този синтаксис, ще трябва да надстроите.

В противен случай типичният подход ще зависи от това откъде са изходните данни. Ако това е само един ред и не знаете дали трябва да актуализирате или вмъкнете, вероятно ще направите:

UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END

Ако вашият източник е #temp таблица, променлива на таблица, TVP или друга таблица, можете да направите:

UPDATE dest SET ...
  FROM dbo.destination AS dest
  INNER JOIN dbo.source AS src
  ON dest.key = src.key;

INSERT dbo.destination SELECT ... FROM dbo.source AS src
  WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);

Както при MERGE (и както Майкъл Суарт демонстрира тук ), все пак ще искате да заобиколите всеки от тези методи с подходящи транзакции, обработка на грешки и ниво на изолация, за да се държи като истинска, единична операция. Дори едно MERGE не ви предпазва от едновременност.

Публикувах някои други предупреждения относно 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 на Mac с помощта на SQL Operations Studio

  2. Как да изтриете 8 500 000 записа от една таблица на sql сървър

  3. Функция за изчисляване на медиана в SQL Server

  4. Функция за проверка на SQL имейл с помощта на Regex

  5. Разлика между CTE и SubQuery?