Usando Merge

Essa instrução permite que façamos mescla de dados entre duas tabelas, utilizando os comandos DML (insert, update e delete) como ação caso uma condição seja verdadeira,ou falsa.

Além de tudo a instrução Merge possui uma sintaxe muito simples, veja abaixo:

  • Merge: indica a tabela de destino
  • Using: indica a tabela de origem
  • When not matched then: em português, “quando a condição não combinar” (não precisa explicar não é?)
  • When matched then: em português, “quando a condição combinar”

Há pouco tempo atrás construí uma solução em um projeto, onde os representantes diariamente sincronizavam dados de pedidos em uma tabela chamada sinc.pedido e uma rotina diária era executada para mesclar esses dados há uma tabela chamada adm.pedido. Abaixo seguem o ER das tabelas do cenário.

Utilizando o SQL Data Generator da Red Gate eu incluí 100000 registros na tabela de sincronização. Assim ao criarmos a rotina de mescla teremos uma idéia do desempenho.

Abaixo segue o código utilizado para fazer o Merge dos dados, esse script levou 2 segundos para rodar no meu notebook no ambiente de teste que eu criei já no ambiente de produção a mesma quantidade de dados demora menos de 1 segundo para executar.

Merge adm.pedido 
    Destino
Using sinc.pedido 
    Origem
On 
    origem.cdpedido = Destino.cdpedido
When Not Matched then
    Insert values (Origem.cdpedido, Origem.dtpedido, Origem.cdcliente, Origem.cdvendedor, Origem.dspedido)
When matched then    
    Update set Destino.cdpedido = Origem.cdpedido;    

Para concluir, em versões passadas do SQL Server poderíamos utilizar um cursor para fazer a comparação da tabela e tomar as ações, ou até mesmo uma tabela temporária enfim existem diversas formas criativas de contornar a situação, porém o Merge nos da um desempenho melhor na maior parte dos casos e é muito fácil de programar.

Abraço, Rodrigo

2 comentários em “Usando Merge

  1. Merely want to say your article is astounding. The clarity in your post is simply spectacular and i can assume you are an expert on this field. Well with your permission allow me to grab your rss feed to keep up to date with forthcoming post. Thanks a million and please keep up the delightful work.

Deixe uma resposta para CrespiCancelar resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.