sexta-feira, outubro 21, 2011

SQL - Utilização do Comando Merge

Artigo enviado por Daniel Carvalho

Prezados

            O comando MERGE, antes exclusivo do Oracle, agora também está presente no SQL Server (2008 em diante). Ele é muito interessante para situações onde se deseja fazer um UPDATE ou INSERT, baseado na existência ou não dos dados na tabela destino. Sua performance é MUITO melhor que efetuar o select para verificar a existência, e então decidir entre o update ou o insert, pois o merge faz tudo ao mesmo tempo, para todos os registros.

A sintaxe básica do comando é:

MERGE INTO
USING
ON ()
WHEN MATCHED THEN
UPDATE SET
WHEN NOT MATCHED THEN
INSERT ()
VALUES ()

Como exemplo, suponha que se deseje atualizar uma tabela de pessoas jurídicas, baseado em uma tabela genérica com todos os clientes. O comando seria algo assim:

MERGE INTO tb_pj dst
USING (select cod_cli,
             nome_cli,
             cpfcnpj
        from tb_cli
       where cli_tip = 'PJ') ori (ori é um alias qualquer, para o select dos clientes PJ)
   ON (dst.cod_cli = ori.cod_cli) (join da ori com dst, para definir a existência dos dados)
WHEN MATCHED THEN UPDATE (lista das colunas que serão atualizadas, caso já exista)
  SET dst.hdrdathor = getdate(),
      nome = ori.nome,
      dst.cnpj = ori.cpfcnpj
WHEN NOT MATCHED THEN INSERT ( (colunas da dst que receberão valores)
      hdrdathor,
      cod_cli,
      nome_cli,
      cnpj )
VALUES ( (lista de valores que serão inseridos)
      getdate(),
      ori.nome_cli,
      ori.cpfcnpj )

Equipe DTP

Um comentário:

Raphael Fernandes disse...

Bom post.
A forma abordada foi bem simples e direta.
Fiz um post sobre o assunto:
http://raphaeloafernandes.blogspot.com.br/2013/03/o-comando-sql-merge.html

Confere lá depois.

Valeu!!