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.*
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
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:
Muito interessante para quando precisamos ter certeza do que foi deletado.
Não conhecia, ganhou meu +
Postar um comentário