sábado, 28 de maio de 2011

Comando DELETE - Retornando linhas excluídas

Para fins de log ou simples confirmação de sucesso da operação, o comando DELETE pode retornar as linhas excluídas em sua execução.

A cláusula OUTPUT é responsável por esta funcionalidade. Para utilizá-la, basta adicioná-la ao final do comando DELETE e referenciar os campos da tabela virtual (DELETED) gerada após a execução. Veja a sintaxe básica:

DELETE FROM [tabela]
OUTPUT DELETED.*

Além disso, através da cláusula WHERE pode-se filtrar as linhas retornadas. Veja o exemplo abaixo:

-- Criando tabela de teste
CREATE TABLE teste (id int identity (1,1))
GO

-- Populando tabela com 20 registros
INSERT INTO teste DEFAULT VALUES
GO 20

-- Excluindo registros da tabela e retornando apenas os registros -- excluídos com ID < 10.
DELETE FROM teste
OUTPUT DELETED.*
WHERE id < 10

-- Excluindo tabela de testes
DROP TABLE teste
GO

Ao executar este script, um conjunto de dados é retornado com as linhas excluídas cujo id não foi excluído pelo filtro. Repare que não existe um comando SELECT, o próprio comando DELETE retornou os dados:


Este é um importante recurso para a criação de logs e auditoria via banco de dados ou aplicação. Através do conjunto de dados retornado, pode-se registrar o exato momento e usuário responsável pela exclusão do registro.

Para outras informações relacionadas à criação de logs e monitoramento das atualizações em uma base de dados, veja outros artigos:


Em breve teremos mais artigos sobre auditoria e monitoramento de bancos de dados!

Até a próxima!

Um comentário:

Alessandro H. Garbiati disse...

Muito interessante para quando precisamos ter certeza do que foi deletado.
Não conhecia, ganhou meu +

Postar um comentário