MERGE - Uma explicação melhor e detalhes
20/10/2014
0
Me desculpem realmente, mas não consegui assimilar o que está sendo dito acima e pra piorar não entendi o t-sql.
Mariana Carvalho
Post mais votado
20/10/2014
A lógica de usar o merge é para tabelas similares, você pode colocar toda sua lógica na comparação "ON" semelhante aos JOINS e isolar certas situações:
MERGE #Tabela1 AS Destino USING #Tabela2 AS Origem ON Destino.Campo = Origem.Campo
William
Mais Posts
20/10/2014
William
Imagine 2 tabelas de clientes, uma no banco antigo e outra no banco novo, sendo que o banco antigo possuía vários clientes e no banco novo possuía poucos clientes, então seria necessário atualizar alguns registros e inserir outros.
TABELA CLIENTES_ANTIGA
ID - NOME - CELULAR
1 - JOÃO - 99998888
2 - PEDRO - 55554444
3 - VITOR - 52525263
TABELA CLIENTES_NOVA
ID - NOME - CELULAR
1 - JOÃO - 99998888
2 - PEDRO - 555555555
Observe a diferença de dados entre a CLIENTES_ANTIGA e a CLIENTES_NOVA:
- O registro com ID 1 é igual nas 2 tabelas então não precisa ser atualizado na clientes_nova
- O registro com ID 2 possui o número de celular diferente, posso atualizar somente o celular na clientes _nova
- O registro com ID 3 existe na clientes_antiga, mas não existe na clientes_nova, nesse caso posso inserir ele na clientes_nova
Você pode excluir registros também!
Quanto a semântica dos comandos, segue documentação da microsoft: http://msdn.microsoft.com/pt-br/library/bb510625.aspx.
20/10/2014
Mariana Carvalho
20/10/2014
Mariana Carvalho
Server Error in '/' Application.
20/10/2014
Mariana Carvalho
21/10/2014
Mariana Carvalho
CREATE DATABASE TESTE_MERGE; USE TESTE_MERGE; CREATE TABLE CLIENTES_ANTIGA( ID INT PRIMARY KEY, NOME VARCHAR, TELEFONE INT ); CREATE TABLE CLIENTES_NOVA( ID INT PRIMARY KEY, NOME VARCHAR, TELEFONE INT ); INSERT INTO CLIENTES_ANTIGA (ID, NOME, TELEFONE) VALUES (1, 'M', 23324455); INSERT INTO CLIENTES_ANTIGA (ID, NOME, TELEFONE) VALUES (2, 'S', 23324455); INSERT INTO CLIENTES_ANTIGA (ID, NOME, TELEFONE) VALUES (3, 'R', 23324455); INSERT INTO CLIENTES_NOVA(ID, NOME, TELEFONE) VALUES (1, 'M', 55555555); INSERT INTO CLIENTES_NOVA (ID, NOME, TELEFONE) VALUES (2, 'S', 44444); MERGE #Tabela1 AS CLIENTES_ANTIGA USING #Tabela2 AS CLIENTES_NOVA ON CLIENTES_NOVA.NOME = CLIENTES_ANTIGA.NOME
21/10/2014
William
21/10/2014
Mariana Carvalho
23/10/2014
Mariana Carvalho
– Há registro no destino e na origem WHEN MATCHED THEN UPDATE SET Ativo = 0, Alteracao = GETDATE() –Quando não há registro no destino e há na origem WHEN NOT MATCHED THEN INSERT (Nome, Cadastro, Ativo) VALUES (Origem.Nome, Getdate(),1) –Quando há registro no destino mas não há na origem –e que sejam diferente de João WHEN NOT MATCHED BY SOURCE AND Nome <>‘Joao’ THEN UPDATE SET Ativo = NULL, Alteracao = GETDATE(); SELECT * FROM #Tabela1 SELECT * FROM #Tabela2
Clique aqui para fazer login e interagir na Comunidade :)