Olá pessoal, espero que estejam todos bem! Hoje gostaria de compartilhar uma procedure que fiz para automatizar o processo de merge que volta e meia aparece para fazer.
O script é bem simples e versátil, nele você pode passar os seguintes parâmetros:
@table_source = Tabela de origem
@table_target = Tabela destino
@cols_key = Aqui você pode passar as colunas que são chaves para o merge (caso seja uma chave composta basta passar as colunas separadas por VIRGULA) Ex: 'COL1,COL2,COL3'
@schema_table_source = Passar o schema da tabela origem por padrão o schema é dbo
@schema_table_target = Passar o schema da tabela destino por padrão o schema é dbo
@name_base_table_source = Nome da base da tabela origem
@name_base_table_target = Nome da base da tabela destino
@usar_pk_como_chave = Nessa parametro voce pode passar S ou N, caso passe S, o merge será feito usando a primary key como chave
@string_linked_server = Nesse parametro voce pode passar o nome do linked server da tabela origem, caso tenha um linked server, se não tiver deixei NULL
Agora que conhecemos os parâmetros da rotina, vamos ao que ela se propõe a fazer:
O dado que existir na origem e não existir no destino ela insere no destino;
O dado que estiver diferente entre a origem e o destino, ela faz um update no destino para equalizar;
O dado que não existir na origem e existir no destino, ela deleta do destino;
Observação importante, as tabelas origem e destino precisam ter a mesma estrutura (nome e quantidade de colunas)
Exemplo de utilização:
Por motivos de segurança e validação, deixei com que essa procedure retorne o script do merge, assim você pode validar antes de rodar na base :)
Obs: Ela não executa o script, ela mostra ele no grid
merge
Northwind.dbo.vendas_2 as destino
using Northwind.dbo.Dim_Venda as origem
on (Origem.Id_Venda = Destino.Id_Venda )
WHEN MATCHED THEN UPDATE SET
Destino.Dt_Venda = Origem.Dt_Venda
,Destino.Id_Produto = Origem.Id_Produto
,Destino.Quantidade = Origem.Quantidade
,Destino.Valor = Origem.Valor
WHEN NOT MATCHED THEN INSERT VALUES(origem.Id_Venda,origem.Dt_Venda,origem.Id_Produto,origem.Quantidade,origem.Valor)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
Bem simples né pessoal? mas espero que ajude bastante pessoas! Abraços e até a próxima!
Comentários
Postar um comentário