SQL Server 2008: Utilizando OUTPUT no DELETE.

Sempre que você utiliza a função DELETE, é retornado pelo SQL Server 2008 uma mensagem “(X linha(s) afetadas)“. por padrão o SQL retorna somente essa mensagem, porém foi criada a função OUTPUT que permite exibir ou gravar os dados(deletados) de diversas formas.

  • Um DELETE comum é realizado da seguinte forma:

DELETE FROM CLIENTE

WHERE NOME = ‘Marko Aurélio’

  • Para utilizar o OUTPUT exibindo os valores deletados no ResultSet é preciso executar a seguinte estrutura:

DELETE FROM CLIENTE

OUTPUT deleted.ID, deleted.NOME

WHERE NOME = ‘Marko Aurélio’

Retornando o “Results” abaixo:

Result Set do Output para Deleção

  • Para utilizar o OUTPUT gravando os valores deletados em uma tabela de “LOG” é preciso executar a seguinte estrutura:

DELETE FROM CLIENTE

OUTPUT deleted.ID, deleted.NOME , GETDATE() INTO TABELALOGTEMP

WHERE NOME = ‘Marko Aurélio’

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.
  • 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
  • DELETE WHERE = nunca use DELETE sem WHERE. Você deletará todos os registros da tabela e o processo para restauração será muito trabalhoso (‘Mas não impossível’).

Marko Aurélio