SQL Server 2008: Utilizando OUTPUT no UPDATE

Quando se realiza um UPDATE em uma tabela importante é preciso se certificar que é possível retornar as alterações realizadas. Para solucionar esse problema o SQL Server 2008 criou a função OUTPUT. A implementação dela é bem simples:

  • Em um UPDATE normal você utiliza da seguinte forma:

UPDATE Production.Product

SET ListPrice = 100.00

WHERE Product.Color = ‘Blue’

  • Com a função OUTPUT implementada na instrução SQL você consegue exibir oque foi alterado, facilitando na identificação de alguma atualização indevida, conforme exemplo:

UPDATE Production.Product SET ListPrice = 100.00

OUTPUT deleted.ProductID, deleted.ListPrice , inserted.ListPric

WHERE Product.Color = ‘Blue’

Neste caso, o update retornará o seguinte resultado:

Resultado da Função OUTPUT no Update

Sendo que a primeira coluna representa o ID, a segunda o Valor Antigo e a terceira o Valor Novo.

  • Outro método mais seguro que exibir no ResultSet, seria gravar os dados do update numa tabela de “LOG”, conforme exemplo:

UPDATE Production.Product SET ListPrice = 100.00

OUTPUT deleted.ProductID, deleted.ListPrice , inserted.ListPrice, GETDATE() into TempUpdateProduct

WHERE Product.Color = ‘Blue’

Nessa situação, ele gravará os valores em uma outra tabela que já exista.

Conceitos Adicionais:

  • DELETED = é uma tabela de um registro que fica na memória do SQL  durante o processo de deleção de dados até o momento que é finalizada a transação interna do SQL e confirmada a remoção de dados da tabela física.
  • INSERTED = é uma tabela de um registro que fica na memória do SQL  durante o processo de inserção de dados até o momento que é gravado na tabela física.
  • OUTPUT = Define que existirá uma saída de dados ou um procedimento com os dados inseridos.
  •  INTO = Os valores que seriam exibidos em tela, são inseridos em outra tabela
  • UPDATE WHERE = nunca use UPDATE sem WHERE. Você alterará todos os registros da tabela.

Marko Aurélio

Deixe um comentário