Uso do Merge SQL Server

Standard

Segue abaixo uma dica do meu amigo Jord Johnsons, sobre o uso do recurso MERGE do SQL server, ele fez um exemplo bem didático para que fosse simples de entender e ver na prática funcionando, eu acrescentei os comentários explicativos ao lado dos comandos para facilitar a compreensão deste interessante recurso:

/*
UTILIZANDO O RECURSO DE MERGE COM O T-SQL
*/
-- Criando as tabelas temporárias
CREATE TABLE ##TBL_A
(
ID INT,
DESCRICAO VARCHAR(100)
)
GO
CREATE TABLE ##TBL_B
(
ID INT,
DESCRICAO VARCHAR(100)
)
--------------------------------------
-- Populando as tabelas
INSERT INTO ##TBL_A VALUES
(1,'TESTE1'),
(2,'TESTE2'),
(3,'TESTE3'),
(4,'TESTE4'),
(5,'TESTE5')
GO
INSERT INTO ##TBL_B VALUES
(1,'TESTE1'),
(2,'TESTE'),
(8,'TESTE8')
GO
--------------------------------------
-- Selecionando os dados no MERGE
SELECT * FROM ##TBL_A
SELECT * FROM ##TBL_B

Resultado da tabela A:
ID DESCRICAO
———– —————————————————————————————————-
1 TESTE1
2 TESTE2
3 TESTE3
4 TESTE4
5 TESTE5

Resultado da tabela B:
ID DESCRICAO
———– —————————————————————————————————-
1 TESTE1
2 TESTE
8 TESTE8


--------------------------------------
-- Realizando o MERGE
MERGE ##TBL_B AS TARGET -- Tabela de destino
USING ##TBL_A AS SOURCE -- Tabela de origem
ON TARGET.ID = SOURCE.ID -- Condição para considerar o registro como igual
WHEN MATCHED AND TARGET.DESCRICAO <> SOURCE.DESCRICAO -- Quando a descrição do destino for diferente da origem
THEN UPDATE SET TARGET.DESCRICAO = SOURCE.DESCRICAO -- Faça o update no destino com o valor da origem
WHEN NOT MATCHED BY TARGET THEN -- Quando não encontrar o registro no destino
INSERT (ID,DESCRICAO) VALUES(SOURCE.ID,SOURCE.DESCRICAO) -- faça o insert no destino com os valores da origem
WHEN NOT MATCHED BY SOURCE THEN -- Quando existir no destino mas não existir na origem
DELETE -- delete do destino
OUTPUT $action; -- Exiba no resultado as ações realizadas pelo macth
--------------------------------------
-- Consulta das tabelas após o merge
SELECT * FROM ##TBL_A
SELECT * FROM ##TBL_B

Resultado da Tabela A:
ID DESCRICAO
———– —————————————————————————————————-
1 TESTE1
2 TESTE2
3 TESTE3
4 TESTE4
5 TESTE5
Resultado da Tabela B:
ID DESCRICAO
———– —————————————————————————————————-
1 TESTE1
2 TESTE2
3 TESTE3
4 TESTE4
5 TESTE5


--------------------------------------
-- Dropando as tabelas temporárias
DROP TABLE ##TBL_A
DROP TABLE ##TBL_B