MERGE
byl představen v SQL Server 2008. Chcete-li použít tuto syntaxi, budete muset provést upgrade.
Jinak bude typický přístup záviset na tom, odkud jsou zdrojová data. Pokud je to jen jeden řádek a nevíte, zda je potřeba aktualizovat nebo vložit, pravděpodobně byste to udělali:
UPDATE ... WHERE key = @key;
IF @@ROWCOUNT = 0
BEGIN
INSERT ...
END
Pokud je vaším zdrojem #temp tabulka, proměnná tabulky, TVP nebo jiná tabulka, můžete:
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);
Stejně jako u MERGE
(a jak zde předvedl Michael Swart
), budete stále chtít obklopit kteroukoli z těchto metod správnými transakcemi, zpracováním chyb a úrovní izolace, aby se chovala jako skutečná, jediná operace. Dokonce i jediné MERGE
prohlášení vás nechrání před souběžností.
Zveřejnil jsem některá další upozornění ohledně SLOUČENÍ v více podrobností zde .