SQL Server 2008: Utilizando OUTPUT no UPDATE
04/05/2012 Deixe um comentário
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:
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