Novidades SQL Server 2008 – Instrução MERGE
Como certeza uma das maiores novidades do SQL Server 2008 é a instrução MERGE.
Merge significa “fusão”, através desta instrução é possível mesclar os dados de duas tabelas em uma tabela alvo.
Imagine que você tenha duas tabelas, uma com o cadastro de funcionários do seu sistema e outra com um segundo cadastro de funcionários que foi importado de uma planilha em excel, por exemplo.
Pressupondo que a segunda tabela contém os dados mais atuais, e que você deseja inserir na tabela de funcionários do seu sistema os NOVOS registros que estão na segunda tabela, atualizar os registros da tabela funcionários do seu sistema que existem na segunda tabela e por fim excluir registros da tabela funcionários do seu sistema que não existam na segunda tabela, para isso você pode utilizar a instrução MERGE.
Nas versões anteriores do SQL Server, caso você precisasse realizar este tipo de operação, era necessário realizar uma série de verificações, instruções insert, update e delete, agora você pode fazer tudo isso através da instrução MERGE.
Veja o exemplo do código abaixo:
MERGE tb_Funcionario AS FUN USING tb_Funcionario_Novos AS FUN_NOVOS ON FUN.Codigo = FUN_NOVOS.Codigo WHEN MATCHED THEN -- Se o registro existir na tabela alvo, atualizar UPDATE SET Nome = FUN_NOVOS.Nome, Sobrenome = FUN_NOVOS.Sobrenome, Salario = FUN_NOVOS.Salario WHEN NOT MATCHED BY TARGET THEN -- Se o registro não existir na tabela alvo, inserir INSERT (Codigo, Nome, Sobrenome, Salario) VALUES (FUN_NOVOS.Codigo, FUN_NOVOS.Nome, FUN_NOVOS.Sobrenome, FUN_NOVOS.Salario) WHEN NOT MATCHED BY SOURCE THEN DELETE OUTPUT $action, Inserted.*, Deleted.*;
Este código faz exatamente como explicado acima, no final a tabela de funcionários do sistema (tb_Funcionario) ficará atualizada, seja com novos registros, com registros pré-existentes atualizados ou registros antigos removidos, tudo com base na segunda tabela (tb_Funcionario_Novos).
A última linha (código OUTPUT) é opcional, ela retorna:
- A ação que foi realizada (insert, update ou delete)
- Registros com seus valores inseridos/atualizados
- Registros com seus valores excluídos
Com a instrução MERGE é possível, por exemplo, criar uma stored procedure que recebe como parâmetro valores e estes são inseridos (caso não exista) ou atualizados (caso já exista) , sem que você tenha que realizar verificações com IF.
IMPORTANTE: Ao final da instrução MERGE, não esqueça de fechá-la através do ponto-e-vírgula.
Para mais informações sobre a instrução MERGE, consulte o Books online do SQL Server 2008 através do link http://msdn.microsoft.com/en-us/library/bb510625.aspx.