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.
[sourcecode language=”sql”]
CREATE TABLE T_SQL
(
CODIGO INT IDENTITY (1,1),
DESCRICAO VARCHAR(50)
);
[/sourcecode]
Pronto à tabela de exemplo foi criada, agora vamos a criar a trigger.
[sourcecode language=”sql”]
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
[/sourcecode]
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.
[sourcecode language=”sql”]
INSERT INTO T_SQL (DESCRICAO) VALUES
(‘T-SQL.COM.BR’),
(‘T-SQL’);
[/sourcecode]
O retorno que teremos será o seguinte:
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.
[sourcecode language=”sql”]
CREATE TABLE T_SQL_LOG
(
CD_LOG INT IDENTITY (1,1),
DS_LOG VARCHAR(4000),
TP_LOG VARCHAR(23),
DT_LOG DATETIME
);
[/sourcecode]
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.
[sourcecode language=”sql”]
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
[/sourcecode]
Pronto agora vamos fazer o insert e ver o resultado da nossa trigger sendo utilizada como log.
[sourcecode language=”sql”]
INSERT INTO T_SQL (DESCRICAO) VALUES
(‘T-SQL.COM.BR’),
(‘T-SQL’);
[/sourcecode]
Após o insert, vamos fazer um select na tabela de log e ver o resultado.
[sourcecode language=”sql”]
SELECT * FROM T_SQL_LOG
[/sourcecode]
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.
Parabém, muito bom o conteúdo!