MERGE
werd geïntroduceerd in SQL Server 2008. Als u die syntaxis wilt gebruiken, moet u upgraden.
Anders hangt de typische aanpak af van waar de brongegevens vandaan komen. Als het maar één rij is en u niet weet of u deze moet bijwerken of invoegen, zou u dat waarschijnlijk doen:
UPDATE ... WHERE key = @key;
IF @@ROWCOUNT = 0
BEGIN
INSERT ...
END
Als uw bron een #temp-tabel, tabelvariabele, TVP of andere tabel is, kunt u het volgende doen:
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);
Net als bij MERGE
(en zoals Michael Swart hier demonstreerde
), wilt u nog steeds een van deze methoden omringen met de juiste transacties, foutafhandeling en isolatieniveau om zich als een echte, enkele bewerking te gedragen. Zelfs een enkele MERGE
verklaring beschermt u niet tegen gelijktijdigheid.
Ik heb enkele andere waarschuwingen over MERGE gepubliceerd in meer details hier .