Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Kann ich die MERGE-Anweisung in SQL Server 2005 verwenden?

MERGE wurde in SQL Server 2008 eingeführt. Wenn Sie diese Syntax verwenden möchten, müssen Sie aktualisieren.

Andernfalls hängt der typische Ansatz davon ab, woher die Quelldaten stammen. Wenn es nur eine Zeile ist und Sie nicht wissen, ob Sie aktualisieren oder einfügen müssen, würden Sie wahrscheinlich Folgendes tun:

UPDATE ... WHERE key = @key;

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

Wenn Ihre Quelle eine #temp-Tabelle, Tabellenvariable, TVP oder eine andere Tabelle ist, können Sie Folgendes tun:

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);

Wie bei MERGE (und wie Michael Swart hier demonstriert ), sollten Sie dennoch jede dieser Methoden mit geeigneten Transaktionen, Fehlerbehandlung und Isolationsstufe umgeben, um sich wie ein echter Einzelvorgang zu verhalten. Sogar ein einzelnes MERGE -Anweisung schützt Sie nicht vor Parallelität.

Ich habe einige andere Vorsichtshinweise zu MERGE in veröffentlicht mehr Details hier .