MERGE nei pacchetti di Integration Services

Si applica a:SQL Server SSIS Integration Runtime in Azure Data Factory

Nella versione corrente di SQL Server Integration Services, l'istruzione SQL in un'attività Esegui SQL può contenere un'istruzione MERGE . Questa MERGE istruzione consente di eseguire più INSERToperazioni , UPDATEe DELETE in un'unica istruzione.

Per usare l'istruzione MERGE in un pacchetto, seguire questa procedura:

  • Creare un'attività di flusso di dati che carichi, trasformi e salvi i dati di origine in una tabella temporanea o di staging.

  • Creare un'attività Esegui SQL contenente l'istruzione MERGE.

  • Connetti l'attività Flusso di dati all'attività Esegui SQL e usa i dati nella tabella di staging come input per l'istruzione MERGE.

    Nota

    Anche se un'istruzione MERGE richiede in genere una tabella di staging in questo scenario, le prestazioni dell'istruzione MERGE superano in genere quella della ricerca riga per riga eseguita dalla trasformazione Ricerca. MERGE è utile anche quando le grandi dimensioni di una tabella di ricerca metterebbero a dura prova la memoria disponibile per la trasformazione Ricerca per la memorizzazione nella cache della relativa tabella di riferimento.

Utilizzo di MERGE

In genere, si usa l'istruzione MERGE quando si desidera applicare modifiche che includono inserimenti, aggiornamenti ed eliminazioni da una tabella a un'altra. Prima di SQL Server 2008 (10.0.x), per eseguire questo processo erano necessarie una trasformazione Cerca e più trasformazioni Comando OLE DB. Con la trasformazione Ricerca veniva eseguita una ricerca riga per riga per determinare se ogni riga era nuova o era stata modificata. Le trasformazioni Comando OLE DB hanno quindi eseguito le necessarie operazioni INSERT, UPDATE e DELETE. A partire da SQL Server 2008 (10.0.x), una singola MERGE istruzione può sostituire sia la trasformazione Lookup che le trasformazioni dei comandi OLE DB corrispondenti.

MERGE con caricamenti incrementali

La funzionalità Change Data Capture, una novità di SQL Server 2008 (10.0.x), rende più affidabile l'esecuzione di caricamenti incrementali in un data warehouse. In alternativa all'uso delle trasformazioni dei comandi OLE DB con parametri per eseguire gli inserimenti e gli aggiornamenti, è possibile usare l'istruzione MERGE per combinare entrambe le operazioni.

Per altre informazioni, vedere Applicazione delle modifiche alla destinazione.

MERGE in altri scenari

Negli scenari seguenti è possibile usare l'istruzione MERGE all'esterno o all'interno di un pacchetto di Integration Services. Un pacchetto di Integration Services, tuttavia, è spesso richiesto per caricare questi dati da più origini eterogenee e quindi per combinare e pulire i dati. Pertanto, è consigliabile usare l'istruzione MERGE in un pacchetto per praticità e facilità di manutenzione.

Rilevare le abitudini di acquisto

Nella tabella FactBuyingHabits del data warehouse viene rilevata l'ultima data in cui un cliente ha acquistato un determinato prodotto. La tabella è costituita dalle colonne ProductID, CustomerID e PurchaseDate. Ogni settimana, il database transazionale genera una tabella PurchaseRecords che include gli acquisti eseguiti durante tale settimana. L'obiettivo consiste nell'usare una singola MERGE istruzione per unire le informazioni nella tabella PurchaseRecords nella tabella FactBuyingHabits. Per le coppie product-customer che non esistono, l'istruzione MERGE inserisce nuove righe. Per le coppie prodotto-cliente esistenti, l'istruzione MERGE aggiorna la data d'acquisto più recente.

Monitora la cronologia dei prezzi

La tabella DimBook rappresenta l'elenco di libri nell'inventario di un libraio e identifica la cronologia dei prezzi di ogni libro. La tabella contiene le colonne ISBN, ProductID, Price, Shelf e IsCurrent. Include inoltre un'unica riga per ogni prezzo assegnato al libro. Una di queste righe contiene il prezzo corrente. Per indicare quale riga contiene il prezzo corrente, il valore della colonna IsCurrent per tale riga è impostato su 1.

Ogni settimana, il database genera una tabella WeeklyChanges che contiene le modifiche di prezzo e i nuovi libri aggiunti durante la settimana. Usando una singola MERGE istruzione, è possibile applicare le modifiche nella tabella WeeklyChanges alla tabella DimBook. L'istruzione MERGE inserisce nuove righe per i libri appena aggiunti e aggiorna la colonna IsCurrent a 0 per le righe di libri esistenti i cui prezzi sono stati modificati. L'istruzione MERGE inserisce anche nuove righe per i libri i cui prezzi sono stati modificati e per queste nuove righe imposta il valore della colonna IsCurrent su 1.

Unire una tabella contenente nuovi dati con la tabella precedente

Il database modella le proprietà di un oggetto usando uno "schema aperto", ovvero una tabella contiene coppie nome-valore per ogni proprietà. La tabella Properties contiene tre colonne: EntityID, PropertyID e Value. È necessario sincronizzare una versione più recente della tabella, denominata NewProperties, con la tabella Properties. Per sincronizzare queste due tabelle, è possibile usare una singola MERGE istruzione per eseguire le operazioni seguenti:

  • Eliminare proprietà dalla tabella Properties se non si trovano nella tabella NewProperties.

  • Aggiornare i valori per le proprietà presenti nella tabella Properties con i nuovi valori della tabella NewProperties.

  • Inserire nuove proprietà per le proprietà presenti nella tabella NewProperties ma che non si trovano nella tabella Properties.

Questo approccio risulta utile negli scenari simili agli scenari di replica, in cui l'obiettivo è quello di mantenere sincronizzati i dati di due tabelle in due server.

Tenere traccia dell'inventario

Il database Inventory contiene una tabella ProductsInventory con le colonne ProductID e StockOnHand. In una tabella Shipments con le colonne ProductID, CustomerID e Quantity vengono rilevate le spedizioni di prodotti ai clienti. La tabella ProductInventory deve essere aggiornata ogni giorno in base alle informazioni presenti nella tabella Shipments. Una singola MERGE dichiarazione può ridurre l'inventario nella tabella ProductInventory in base alle spedizioni effettuate. Se l'inventario per un prodotto è stato ridotto a 0, tale MERGE istruzione può anche eliminare tale riga di prodotto dalla tabella ProductInventory.