Operatore MERGE in SQL Server 2008

Vi segnalo questo articolo su una delle principali novità che riguardano il T-SQL il SQL Server 2008: l'operatore MERGE.

Si tratta di una istruzione molto versatile che, data una source table ed una target table messe in relazione fra loro, fonde i risultati della prima nella seconda inserendo i record non presenti (WHEN NOT MATCHED) e aggiornando quelli già presenti (WHEN MATCHED). Rispetto a quanto riportato nell'articolo è presente una terza clausola che è possibile utilizzare: la clausola WHEN SOURCE NOT MATCHED il cui scopo è quello di decidere il da farsi per i record che sono presenti nella target table ma non nella source.

Fino ad oggi era possibile eseguire la stessa attività solo con una triplice istruzione simile a

--eliminazione dei record non più presenti
DELETE dbo.Destinazione
WHERE PK NOT IN (SELECT PK FROM dbo.Origine)

--aggiornamento dei record modificati
UPDATE
SET campo1 = O.campo1,
    campo2 = O.campo2,
    ...,
    campon = O.campon
FROM dbo.Origine O INNER JOIN dbo.Destinazione D
        ON O.PK = D.PK
WHERE campo1 <> O.campo1
    OR campo2 = O.campo2
    OR ...
    OR campon = O.campon

--inserimento dei nuovi
INSERT dbo.Destinazione
SELECT O.*
FROM dbo.Origine O LEFT JOIN dbo.Destinazione D
        ON O.PK = D.PK
WHERE D.PK IS NULL

 

Benvenuto MERGE... Big Smile

Published giovedì 8 novembre 2007 8.31 by lbianchi
Filed under: ,

Comments

No Comments