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:

  1. 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.
  2. 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.
  3. 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 che NOT MATCHED è anche noto come NOT 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 listruzione MERGE aggiorna i valori nelle colonne del nome della categoria e dellimporto nella tabella sales.category.
  • In secondo luogo, le righe con ID 5 e 6 della tabella sales.category_staging non esistono nella tabella sales.category, quindi listruzione MERGE inserisce queste righe nella tabella di destinazione.
  • Terzo, la riga con ID 2 dalla tabella sales.category non esiste nella tabella sales.sales_staging, pertanto MERGE 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *