SQL Server MERGE (Português)
Resumo: neste tutorial, você aprenderá a usar o SQL Server MERGE
para atualizar dados em uma tabela com base em valores correspondentes de outra tabela.
Introdução Instrução MERGE do SQL Server
Suponha que você tenha duas tabelas chamadas tabelas de origem e de destino e precise atualize a tabela de destino com base nos valores correspondentes da tabela de origem. Existem três casos:
- A tabela de origem possui algumas linhas que não existem na tabela de destino. Nesse caso, você precisa inserir as linhas que estão na tabela de origem na tabela de destino.
- A tabela de destino possui algumas linhas que não existem na tabela de origem. Nesse caso, você precisa excluir as linhas da tabela de destino.
- A tabela de origem possui algumas linhas com as mesmas chaves das linhas da tabela de destino. No entanto, essas linhas têm valores diferentes nas colunas não chave. Neste caso, você precisa atualizar as linhas na tabela de destino com os valores provenientes da tabela de origem.
A imagem a seguir ilustra as tabelas de origem e destino com as ações correspondentes: inserir, atualizar e excluir:
Se você use a instrução INSERT
, UPDATE
e DELETE
individualmente, você deve construir três separadamente instruções para atualizar os dados para a tabela de destino com as linhas correspondentes da tabela de origem.
No entanto, o SQL Server fornece a instrução MERGE
que permite executar três ações ao mesmo tempo. O seguinte mostra a sintaxe da instrução MERGE
:
Code language: SQL (Structured Query Language) (sql)
Primeiro, você especifica a tabela de destino e a fonte tabela na cláusula MERGE
.
Em segundo lugar, o merge_condition
determina como as linhas da tabela de origem são correspondidas as linhas da tabela de destino. É semelhante à condição de junção na cláusula de junção. Normalmente, você usa as colunas de chave de chave primária ou chave exclusiva para correspondência.
Terceiro, o merge_condition
resulta em três estados: MATCHED
, NOT MATCHED
e NOT MATCHED BY SOURCE
.
-
MATCHED
: são as linhas que correspondem à condição de mesclagem. No diagrama, eles são mostrados em azul. Para as linhas correspondentes, você precisa atualizar as colunas das linhas na tabela de destino com os valores da tabela de origem. -
NOT MATCHED
: essas são as linhas da fonte tabela que não possui nenhuma linha correspondente na tabela de destino. No diagrama, eles são mostrados em laranja. Nesse caso, você precisa adicionar as linhas da tabela de origem à tabela de destino. Observe queNOT MATCHED
também é conhecido comoNOT MATCHED BY TARGET
. -
NOT MATCHED BY SOURCE
: são as linhas da tabela de destino que não correspondem a nenhuma linha da tabela de origem. Eles são mostrados em verde no diagrama. Se quiser sincronizar a tabela de destino com os dados da tabela de origem, você precisará usar esta condição de correspondência para excluir linhas da tabela de destino.
Exemplo de instrução MERGE do SQL Server
Suponha que temos duas tabelas sales.category
e sales.category_staging
que armazenam as vendas por categoria de produto.
Para atualizar os dados para sales.category
(tabela de destino) com os valores de sales.category_staging
(tabela de origem), use o seguinte MERGE
declaração:
Neste exemplo, usamos os valores nas colunas category_id
em ambas as tabelas como a condição de mesclagem.
- Primeiro, as linhas com id 1, 3, 4 da tabela
sales.category_staging
corresponde às linhas da tabela de destino, portanto, a instruçãoMERGE
atualiza os valores nas colunas de nome de categoria e valor nasales.category
tabela. - Segundo, as linhas com id 5 e 6 da
sales.category_staging
tabela não existem na tabelasales.category
, então a instruçãoMERGE
insere essas linhas na tabela de destino. - Terceiro, a linha com id 2 da tabela
sales.category
não existe na tabelasales.sales_staging
, portanto, aMERGE
instrução exclui esta linha.
Como resultado da fusão, os dados na tabela sales.category
são totalmente sincronizados com os dados na sales.category_staging
tabela.
Neste tutorial, você aprendeu como usar a instrução MERGE
do SQL Server para fazer alterações em uma tabela com base em valores correspondentes de outra tabela.