Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Posso usar a instrução MERGE no SQL Server 2005?


MERGE foi introduzido no SQL Server 2008. Se você quiser usar essa sintaxe, precisará atualizar.

Caso contrário, a abordagem típica dependerá de onde os dados de origem são. Se for apenas uma linha e você não souber se precisa atualizar ou inserir, provavelmente faria:
UPDATE ... WHERE key = @key;

IF @@ROWCOUNT = 0
BEGIN
    INSERT ...
END

Se sua fonte for uma tabela #temp, variável de tabela, TVP ou outra tabela, você pode fazer:
UPDATE dest SET ...
  FROM dbo.destination AS dest
  INNER JOIN dbo.source AS src
  ON dest.key = src.key;

INSERT dbo.destination SELECT ... FROM dbo.source AS src
  WHERE NOT EXISTS (SELECT 1 FROM dbo.destination WHERE key = src.key);

Assim como com MERGE (e como Michael Swart demonstrou aqui ), você ainda desejará cercar qualquer um desses métodos com transações adequadas, tratamento de erros e nível de isolamento para se comportar como uma operação única e verdadeira. Mesmo um único MERGE declaração não protege você da simultaneidade.

Publiquei alguns outros avisos sobre MERGE em mais detalhes aqui .