Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

È possibile utilizzare l'istruzione MERGE in SQL Server 2005?

MERGE è stato introdotto in SQL Server 2008. Se desideri utilizzare tale sintassi, dovrai eseguire l'aggiornamento.

In caso contrario, l'approccio tipico dipenderà dalla provenienza dei dati di origine. Se è solo una riga e non sai se è necessario aggiornare o inserire, probabilmente lo faresti:

UPDATE ... WHERE key = @key;

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

Se la tua fonte è una tabella #temp, una variabile di tabella, TVP o un'altra tabella, puoi fare:

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

Come con MERGE (e come Michael Swart ha dimostrato qui ), vorrai comunque circondare uno di questi metodi con transazioni, gestione degli errori e livello di isolamento adeguati per comportarsi come una vera, singola operazione. Anche un singolo MERGE dichiarazione non ti protegge dalla concorrenza.

Ho pubblicato alcune altre avvertenze su MERGE in maggiori dettagli qui .