Condividi tramite


MERGE nei pacchetti dei Servizi di Integrazione

Nella versione corrente di SQL ServerIntegration Services l'istruzione SQL in un'attività Esegui SQL può contenere un'istruzione MERGE. Questa istruzione MERGE consente di eseguire più operazioni INSERT, UPDATE e DELETE in un'unica istruzione.

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

  • Creare un'attività Data Flow che carica, trasforma e salva i dati di origine in una tabella temporanea o di staging.

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

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

    Annotazioni

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

Nella parte restante di questo argomento vengono illustrati alcuni usi aggiuntivi per l'istruzione MERGE.

Per un componente di destinazione di esempio che supporta l'uso dell'istruzione MERGE, vedere l'esempio della community CodePlex, Merge Destination.

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, questo processo richiedeva sia una trasformazione Ricerca che più trasformazioni comando OLE DB. La trasformazione Ricerca ha eseguito una ricerca riga per riga per determinare se ogni riga è stata nuova o modificata. Le trasformazioni dei comandi OLE DB eseguono quindi le operazioni INSERT, UPDATE e DELETE necessarie. A partire da SQL Server 2008, una singola istruzione MERGE può sostituire sia la trasformazione Lookup che le trasformazioni dei comandi OLE DB corrispondenti.

MERGE con caricamenti incrementali

La funzionalità di change data capture, introdotta in SQL Server 2008, semplifica l'esecuzione affidabile 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 utilizzare l'istruzione MERGE per combinare entrambe le operazioni.

Per altre informazioni, vedere Applicare le 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. Tuttavia, è spesso necessario un pacchetto di Integration Services per caricare questi dati da più origini eterogenee e quindi combinare e pulire i dati. Pertanto, potresti considerare di usare l'istruzione MERGE in un pacchetto per praticità e facilità di manutenzione.

Tenere traccia delle abitudini di acquisto

La tabella FactBuyingHabits nel data warehouse tiene traccia dell'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 effettuati durante tale settimana. L'obiettivo consiste nell'usare una singola istruzione MERGE 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 di acquisto più recente.

Traccia la cronologia dei prezzi

La tabella DimBook rappresenta l'elenco dei libri nell'inventario di un venditore di libri e identifica la cronologia dei prezzi di ogni libro. Questa tabella include queste colonne: ISBN, ProductID, Price, Shelf e IsCurrent. Questa tabella ha anche una riga per ogni prezzo che il libro ha avuto. 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 variazioni di prezzo per la settimana e i nuovi libri aggiunti durante la settimana. Usando una singola istruzione MERGE, è 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 con nuovi dati sulla 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 include tre colonne: EntityID, PropertyID e Value. È necessario sincronizzare una tabella NewProperties che rappresenta una versione più recente della tabella con la tabella Proprietà. Per sincronizzare queste due tabelle, è possibile usare una singola istruzione MERGE per eseguire le operazioni seguenti:

  • Eliminare le proprietà dalla tabella Proprietà se non sono presenti nella tabella NewProperties.

  • Aggiornare i valori per le proprietà presenti nella tabella Proprietà con i nuovi valori disponibili nella tabella NewProperties.

  • Inserire nuove proprietà per le proprietà presenti nella tabella NewProperties, ma non disponibili nella tabella Proprietà.

Questo approccio è utile in scenari simili a quelli di replica, in cui l'obiettivo è mantenere sincronizzati i dati in due tabelle in due server.

Tenere traccia dell'inventario

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