Fazendo uso da tabela temporária INSERTED dentro de uma trigger no SQL Server

O objetivo desse post é mostrar como utilizar o “INSERTED” do SQL Server em triggers do banco de dados.

Primeiramente, vamos criar a tabela para cuja qual iremos utilizar em nosso exemplo.


CREATE TABLE T_SQL

(

CODIGO INT IDENTITY (1,1),

DESCRICAO VARCHAR(50)

);

Pronto à tabela de exemplo foi criada, agora vamos a criar a trigger.


CREATE TRIGGER T_SQL_FI ON T_SQL

FOR INSERT  AS

SELECT 'TESTE INSERT CAPTURANDO INSERTD SQL SERVER T-SQL.COM.BR',

INS.* FROM INSERTED INS

GO

A trigger foi criada, agora todas a vez que for realizado um insert na tabela criada para exemplo haverá um retorno da coluna que foi definida com um texto fixo mais os campos da tabela em que o insert foi realizado.

Vamos fazer um insert na tabela “T_SQL”, para que seja possível visualizarmos o que foi dito acima na prática.


INSERT INTO T_SQL (DESCRICAO) VALUES

('T-SQL.COM.BR'),

('T-SQL');

O retorno que teremos será o seguinte:

T-SQL_001

Agora vocês me perguntam onde podemos fazer a utilização desse tipo de trigger?

Um exemplo simples é um log, por exemplo, toda vez que a tabela tiver um insert ela irá gravar em uma tabela  de log qual horário que foi realizado o insert e o que foi inserido na tabela.

Vamos fazer um exemplo da trigger do inserted para fim de gravar log’s.

Iremos criar primeiramente nossa tabela de log’s.


CREATE TABLE T_SQL_LOG

(

CD_LOG INT IDENTITY (1,1),

DS_LOG VARCHAR(4000),

TP_LOG VARCHAR(23),

DT_LOG DATETIME

);

Agora que a tabela foi criada, vamos fazer as alterações necessárias  para que a tabela de log criada seja alimentada pela trigger criada anteriormente.


ALTER TRIGGER T_SQL_FI ON T_SQL

FOR INSERT

AS

INSERT INTO T_SQL_LOG (DS_LOG, TP_LOG, DT_LOG)
SELECT CAST(INS.CODIGO AS VARCHAR) + ' - ' + INS.DESCRICAO,
       'INSERT',
       GETDATE()
FROM INSERTED INS

GO

Pronto agora vamos fazer o insert e ver o resultado da nossa trigger sendo utilizada como log.


INSERT INTO T_SQL (DESCRICAO) VALUES

('T-SQL.COM.BR'),

('T-SQL');

Após o insert, vamos fazer um select na tabela de log e ver o resultado.


SELECT * FROM T_SQL_LOG

T-SQL_002

Lógico que o que foi falado nesse post é algo bem simples mais para ilustrar de como pode-se fazer a utilização do INSERTED nas triggers.