SQL Server MERGE (Italiano)
Riepilogo: in questo tutorial imparerai come utilizzare SQL Server MERGE
per aggiornare i dati in una tabella in base ai valori corrispondenti a unaltra tabella.
Introduzione Istruzione MERGE di SQL Server
Supponiamo di avere due tabelle chiamate tabelle di origine e di destinazione e che sia necessario aggiorna la tabella di destinazione in base ai valori corrispondenti dalla tabella di origine. Ci sono tre casi:
- La tabella di origine ha alcune righe che non esistono nella tabella di destinazione. In questo caso, è necessario inserire righe che si trovano nella tabella di origine nella tabella di destinazione.
- La tabella di destinazione ha alcune righe che non esistono nella tabella di origine. In questo caso, è necessario eliminare le righe dalla tabella di destinazione.
- La tabella di origine ha alcune righe con le stesse chiavi delle righe nella tabella di destinazione. Tuttavia, queste righe hanno valori diversi nelle colonne non chiave. In questo caso, è necessario aggiornare le righe nella tabella di destinazione con i valori provenienti dalla tabella di origine.
Limmagine seguente illustra le tabelle di origine e di destinazione con le azioni corrispondenti: inserisci, aggiorna ed elimina:
Se tu utilizza listruzione INSERT
, UPDATE
e DELETE
individualmente, devi creare tre separati istruzioni per aggiornare i dati nella tabella di destinazione con le righe corrispondenti dalla tabella di origine.
Tuttavia, SQL Server fornisce listruzione MERGE
che consente di eseguire tre azioni allo stesso tempo. Quanto segue mostra la sintassi dellistruzione MERGE
:
Code language: SQL (Structured Query Language) (sql)
Innanzitutto, specifichi la tabella di destinazione e lorigine tabella nella clausola MERGE
.
In secondo luogo, merge_condition
determina il modo in cui le righe della tabella di origine vengono abbinate a le righe dalla tabella di destinazione. È simile alla condizione di join nella clausola di join. In genere, utilizzi le colonne chiave o chiave primaria o chiave univoca per la corrispondenza.
Terzo, merge_condition
si traduce in tre stati: MATCHED
, NOT MATCHED
e NOT MATCHED BY SOURCE
.
-
MATCHED
: queste sono le righe che corrispondono alla condizione di unione. Nel diagramma, sono mostrati in blu. Per le righe corrispondenti, è necessario aggiornare le colonne delle righe nella tabella di destinazione con i valori della tabella di origine. -
NOT MATCHED
: queste sono le righe della tabella di origine tabella che non ha righe corrispondenti nella tabella di destinazione. Nel diagramma, sono mostrati in arancione. In questo caso, è necessario aggiungere le righe dalla tabella di origine alla tabella di destinazione. Tieni presente cheNOT MATCHED
è anche noto comeNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: queste sono le righe nella tabella di destinazione che non corrispondono ad alcuna riga nella tabella di origine. Sono mostrati in verde nel diagramma. Se desideri sincronizzare la tabella di destinazione con i dati della tabella di origine, dovrai utilizzare questa condizione di corrispondenza per eliminare le righe dalla tabella di destinazione.
Esempio di istruzione MERGE di SQL Server
Supponiamo di avere due tabelle sales.category
e sales.category_staging
che memorizzano le vendite per categoria di prodotto.
Per aggiornare i dati nella sales.category
(tabella di destinazione) con i valori della sales.category_staging
(tabella di origine), utilizza la seguente MERGE
dichiarazione:
In questo esempio, abbiamo utilizzato i valori nelle category_id
colonne di entrambe le tabelle come condizione di unione.
- Innanzitutto, le righe con ID 1, 3, 4 dalla tabella
sales.category_staging
corrisponde alle righe della tabella di destinazione, pertanto listruzioneMERGE
aggiorna i valori nelle colonne del nome della categoria e dellimporto nella tabellasales.category
. - In secondo luogo, le righe con ID 5 e 6 della tabella
sales.category_staging
non esistono nella tabellasales.category
, quindi listruzioneMERGE
inserisce queste righe nella tabella di destinazione. - Terzo, la riga con ID 2 dalla tabella
sales.category
non esiste nella tabellasales.sales_staging
, pertantoMERGE
elimina questa riga.
Come risultato della fusione, i dati nella tabella sales.category
vengono completamente sincronizzati con i dati nella sales.category_staging
tabella.
In questo tutorial, hai imparato a utilizzare listruzione MERGE
di SQL Server per apportare modifiche in una tabella basata sulla corrispondenza dei valori di unaltra tabella.