Я использую SQL Server 2005, и я хотел создать оператор или концепцию MERGE в одном запросе в SQL Server 2005. Возможно ли это?
Могу ли я использовать оператор MERGE в SQL Server 2005?
Ответ 1
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
не защищает вас от concurrency.
Я опубликовал несколько других предостережений о MERGE более подробно здесь.