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:

  1. 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.
  2. 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.
  3. 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 que NOT MATCHED também é conhecido como NOT 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ção MERGE atualiza os valores nas colunas de nome de categoria e valor na sales.category tabela.
  • Segundo, as linhas com id 5 e 6 da sales.category_staging tabela não existem na tabela sales.category, então a instrução MERGE insere essas linhas na tabela de destino.
  • Terceiro, a linha com id 2 da tabela sales.category não existe na tabela sales.sales_staging, portanto, a MERGE 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.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *