MERGE em pacotes do Integration ServicesMERGE in Integration Services Packages

Na versão atual do SQL ServerSQL Server Integration ServicesIntegration Services, a instrução SQL em uma tarefa Executar SQL pode conter uma instrução MERGE.In the current release of SQL ServerSQL Server Integration ServicesIntegration Services, the SQL statement in an Execute SQL task can contain a MERGE statement. A instrução MERGE permite realizar várias operações INSERT, UPDATE e DELETE em uma única instrução.This MERGE statement enables you to accomplish multiple INSERT, UPDATE, and DELETE operations in a single statement.

Para usar a instrução MERGE em um pacote, siga estas etapas:To use the MERGE statement in a package, follow these steps:

  • Crie uma tarefa Fluxo de Dados que carrega, transforma e salva os dados de origem em uma tabela temporária ou de preparação.Create a Data Flow task that loads, transforms, and saves the source data to a temporary or staging table.

  • Crie uma tarefa Executar SQL que contém a instrução MERGE.Create an Execute SQL task that contains the MERGE statement.

  • Conecte a tarefa Fluxo de Dados à tarefa Executar SQL e use os dados da tabela de preparação como entrada para a instrução MERGE.Connect the Data Flow task to the Execute SQL task, and use the data in the staging table as the input for the MERGE statement.

    Observação

    Embora uma instrução MERGE normalmente precise de uma tabela de preparação nesse caso, o desempenho da instrução MERGE, em geral, ultrapassa o desempenho da pesquisa de linha por linha executada pela transformação Pesquisa.Although a MERGE statement typically requires a staging table in this scenario, the performance of the MERGE statement usually exceeds that of the row-by-row lookup performed by the Lookup transformation. A instrução MERGE também é útil quando o tamanho grande de uma tabela de pesquisa testa a memória disponível para a transformação Pesquisa armazenar a tabela de referência em cache.MERGE is also useful when the large size of a lookup table would test the memory that is available to the Lookup transformation for caching its reference table.

    Para um componente de destino de exemplo que oferece suporte ao uso da instrução MERGE, consulte o exemplo da comunidade CodePlex, Destino MERGE.For a sample destination component that supports the use of the MERGE statement, see the CodePlex community sample, MERGE Destination.

Usando MERGEUsing MERGE

Normalmente, você usa a instrução MERGE quando deseja aplicar alterações que incluem inserções, atualizações e exclusões de uma tabela para outra.Typically, you use the MERGE statement when you want to apply changes that include inserts, updates, and deletions from one table to another table. Antes do SQL Server 2008SQL Server 2008, este processo precisava de uma transformação Pesquisa e de várias transformações Comando OLE DB.Prior to SQL Server 2008SQL Server 2008, this process required both a Lookup transformation and multiple OLE DB Command transformations. A transformação Pesquisa executava uma pesquisa em linha por linha para determinar se cada linha era nova ou tinha sido alterada.The Lookup transformation performed a row-by-row lookup to determine whether each row was new or changed. Em seguida, as transformações Comando OLE DB executavam as operações INSERT, UPDATE e DELETE necessárias.The OLE DB Command transformations then performed the necessary INSERT, UPDATE, and DELETE operations. A partir do SQL Server 2008SQL Server 2008, uma única instrução MERGE pode substituir a transformação Pesquisa e as transformações Comando OLE DB correspondentes.Beginning in SQL Server 2008SQL Server 2008, a single MERGE statement can replace both the Lookup transformation and the corresponding OLE DB Command transformations.

MERGE com cargas incrementaisMERGE with Incremental Loads

A funcionalidade de alteração da captura dos dados que é nova no SQL Server 2008SQL Server 2008 facilita a execução de cargas incrementais com segurança em um data warehouse.The change data capture functionality that is new in SQL Server 2008SQL Server 2008 makes it easier to perform incremental loads reliably to a data warehouse. Como alternativa para o uso de transformações Comando OLE DB parametrizadas para executar as inserções e atualizações, você pode usar a instrução MERGE para combinar as duas operações.As an alternative to using parameterized OLE DB Command transformations to perform the inserts and the updates, you can use the MERGE statement to combine both operations.

Para obter mais informações, consulte Aplicar as alterações ao destino.For more information, see Apply the Changes to the Destination.

MERGE em outros cenáriosMERGE in Other Scenarios

Nos cenários a seguir, você pode usar a instrução MERGE fora ou dentro de um pacote do Integration ServicesIntegration Services .In the following scenarios, you can use the MERGE statement either outside or inside an Integration ServicesIntegration Services package. No entanto, um pacote do Integration ServicesIntegration Services geralmente deve carregar esses dados a partir de várias fontes heterogêneas e, em seguida, combinar e limpar os dados.However, an Integration ServicesIntegration Services package is often required to load this data from multiple heterogeneous sources, and then to combine and cleanse the data. Desse modo, é aconselhável usar a instrução MERGE em um pacote para que você tenha mais praticidade e seja mais fácil executar a manutenção.Therefore, you might consider using the MERGE statement in a package for convenience and ease of maintenance.

Acompanhar hábitos de compraTrack Buying Habits

A tabela FactBuyingHabits no data warehouse rastreia a última data em que um cliente comprou um determinado produto.The FactBuyingHabits table in the data warehouse tracks the last date on which a customer bought a given product. A tabela consiste nas colunas ProductID, CustomerID e PurchaseDate.The table consists of ProductID, CustomerID and PurchaseDate columns. Todas as semanas, o banco de dados transacional gera uma tabela PurchaseRecords que inclui as compras feitas durante aquela semana.Every week, the transactional database generates a PurchaseRecords table that includes the purchases made during that week. O objetivo é usar uma única instrução MERGE para mesclar as informações da tabela PurchaseRecords na tabela FactBuyingHabits.The objective is to use a single MERGE statement to merge the information in the PurchaseRecords table into the FactBuyingHabits table. Para os pares produto-cliente que não existem, a instrução MERGE insere linhas novas.For product-customer pairs that do not exist, the MERGE statement inserts new rows. Para os pares produto-cliente que existem, a instrução MERGE atualiza a data de compra mais recente.For product-customer pairs that exist, the MERGE statement updates the most recent date-of-purchase.

Acompanhar o histórico de preçosTrack Price History

A tabela DimBook representa a lista de livros do inventário de um vendedor de livros e identifica o histórico de preços de cada livro.The DimBook table represents the list of books in the inventory of a book seller and identifies the price history of each book. Esta tabela tem estas colunas: ISBN, ProductID, Price, Shelf e IsCurrent.This table has these columns: ISBN, ProductID, Price, Shelf, and IsCurrent. Esta tabela também tem uma linha para cada preço que o livro já teve.This table also has one row for each price the book has had. Uma dessas linhas contém o preço atual.One of these rows contains the current price. Para indicar qual linha contém o preço atual, o valor da coluna IsCurrent para essa linha é definido como 1.To indicate which row contains the current price, the value of the IsCurrent column for that row is set to 1.

Todas as semanas, o banco de dados gera uma tabela WeeklyChanges que contém as alterações de preço da semana e os novos livros que foram adicionados durante a semana.Every week, the database generates a WeeklyChanges table that contains price changes for the week and new books that were added during the week. Usando uma única instrução MERGE, você pode aplicar as alterações da tabela WeeklyChanges na tabela DimBook.By using a single MERGE statement, you can apply the changes in the WeeklyChanges table to the DimBook table. A instrução MERGE insere novas linhas para os livros adicionados recentemente e atualiza a coluna IsCurrent para 0 nas linhas dos livros existentes cujo preço foi alterado.The MERGE statement inserts new rows for newly-added books, and updates the IsCurrent column to 0 for rows of existing books whose prices have changed. A instrução MERGE também insere novas linhas para os livros cujo preço foi alterado e, para essas novas linhas, define o valor da coluna IsCurrent como 1.The MERGE statement also inserts new rows for books whose prices have changed, and for these new rows, sets the value of the IsCurrent column to 1.

Mesclar uma tabela com dados novos em uma tabela antigaMerge a Table with New Data Against the Old Table

O banco de dados define as propriedades de um objeto usando um “esquema aberto”, isto é, uma tabela que contém pares nome-valor para cada propriedade.The database models the properties of an object by using an “open schema,” that is, a table contains name-value pairs for each property. A tabela Properties tem três colunas: EntityID, PropertyID e Value.The Properties table has three columns: EntityID, PropertyID, and Value. Uma tabela NewProperties que é uma versão mais nova da tabela deve ser sincronizada com a tabela Properties.A NewProperties table that is a newer version of the table has to be synchronized with the Properties table. Para sincronizar essas duas tabelas, você pode usar uma única instrução MERGE para executar as seguintes operações:To synchronize these two tables, you can use a single MERGE statement to perform the following operations:

  • Exclua propriedades da tabela Properties se elas não existirem na tabela NewProperties.Delete properties from the Properties table if they are absent from the NewProperties table.

  • Atualize os valores das propriedades que estão na tabela Properties com os novos valores encontrados na tabela NewProperties.Update values for properties that are in the Properties table with new values found in the NewProperties table.

  • Insira novas propriedades para as propriedades que estão na tabela NewProperties, mas não são encontradas na tabela Properties.Insert new properties for properties that are in the NewProperties table but are not found in the Properties table.

    Essa abordagem é útil em cenários que lembram cenários de replicação, onde o objetivo é manter os dados das duas tabelas em dois servidores sincronizados.This approach is useful in scenarios that resemble replication scenarios, where the objective is to keep data in two tables on two servers synchronized.

Acompanhar o inventárioTrack Inventory

O banco de dados Inventory tem uma tabela ProductsInventory que tem as colunas ProductID e StockOnHand.The Inventory database has a ProductsInventory table that has ProductID and StockOnHand columns. Uma tabela Shipments com as colunas ProductID, CustomerID e Quantity rastreia o envio de produtos para os clientes.A Shipments table with ProductID, CustomerID, and Quantity columns tracks shipments of products to customers. A tabela ProductInventory deve ser atualizada diariamente com base nas informações da tabela Shipments.The ProductInventory table has to be updated daily based on information in the Shipments table. Uma única instrução MERGE pode reduzir o inventário na tabela ProductInventory com base nas remessas feitas.A single MERGE statement can reduce the inventory in the ProductInventory table based on the shipments made. Se o inventário de um produto for reduzido a 0, a instrução MERGE também poderá excluir a linha desse produto da tabela ProductInventory.If the inventory for a product has been reduced to 0, that MERGE statement can also delete that product row from the ProductInventory table.