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