SET @Coluna = '' SET @VlrAnt = '' SET @VlrAtu = '' --Verificandotipo do trigger IF EXISTS(SELECT 1 FROMinserted) SET @Operacao = 'INSERT' IF EXISTS(SELECT 1 FROM deleted) BEGIN IF @Operacao IS NULL SET @Operacao = 'DELETE' ELSE SET @Operacao = 'UPDATE' END IF @OPERACAO = 'UPDATE' BEGIN IF UPDATE(QTD_ESTOQUE) BEGIN SET @Coluna = 'QTD_ESTOQUE' SET @VlrAnt = (SELECT QTD_ESTOQUE FROMDeleted) SET @VlrAtu = (SELECT QTD_ESTOQUE FROMInserted) END IF UPDATE(CD_UNIDADE) BEGIN SET @Coluna = 'CD_UNIDADE' SET @VlrAnt = (SELECT CD_UNIDADE FROMDeleted) SET @VlrAtu = (SELECT CD_UNIDADE FROMInserted) END IF UPDATE(VLR_UNITARIO) BEGIN SET @Coluna = 'VLR_UNITARIO' SET @VlrAnt = (SELECT VLR_UNITARIO FROMDeleted) SET @VlrAtu = (SELECT VLR_UNITARIO FROMInserted) END END IF EXISTS(SELECT 1 FROMinserted) begin INSERTINTO TBEstoqueLog (CD_ESTOQUE,DESC_OPERACAO, DESC_COLUNA, VLR_ANTERIOR,VLR_ATUAL, DTH_OPERACAO) SELECT CD_ESTOQUE, @Operacao, @Coluna, @VlrAnt, @VlrAtu, getdate() FROM Inserted end IF @OPERACAO = 'delete' begin INSERTINTO TBEstoqueLog (CD_ESTOQUE,DESC_OPERACAO, DESC_COLUNA, VLR_ANTERIOR,VLR_ATUAL, DTH_OPERACAO) SELECT CD_ESTOQUE, @Operacao, @Coluna, @VlrAnt, @VlrAtu, getdate() FROM deleted endENDTestamos qual a operacaorealizada:--Verificando tipo dotrigger IF EXISTS(SELECT 1 FROMinserted) SET @Operacao = 'INSERT' IF EXISTS(SELECT 1 FROM deleted) BEGIN IF @Operacao IS NULL SET @Operacao = 'DELETE' ELSE SET@Operacao = 'UPDATE' END Buscamos os valores anterior eatual quando a operacao for de update: IF @OPERACAO = 'UPDATE' BEGIN IF UPDATE(QTD_ESTOQUE) BEGIN SET @Coluna = 'QTD_ESTOQUE' SET @VlrAnt = (SELECT QTD_ESTOQUE FROMDeleted) SET @VlrAtu = (SELECT QTD_ESTOQUE FROMInserted) END IF UPDATE(CD_UNIDADE) BEGIN SET @Coluna = 'CD_UNIDADE' SET @VlrAnt = (SELECT CD_UNIDADE FROMDeleted) SET @VlrAtu = (SELECT CD_UNIDADE FROMInserted) END IF UPDATE(VLR_UNITARIO) BEGIN SET @Coluna = 'VLR_UNITARIO' SET @VlrAnt = (SELECT VLR_UNITARIO FROMDeleted) SET @VlrAtu = (SELECT VLR_UNITARIO FROMInserted) END ENDInserimos em nossa tabela de logde acordo com a operacao realizada; IF EXISTS(SELECT 1 FROMinserted) begin INSERTINTO TBEstoqueLog (CD_ESTOQUE,DESC_OPERACAO, DESC_COLUNA, VLR_ANTERIOR,VLR_ATUAL, DTH_OPERACAO) SELECT CD_ESTOQUE, @Operacao, @Coluna, @VlrAnt, @VlrAtu, getdate() FROM Inserted end IF @OPERACAO = 'delete' begin INSERTINTO TBEstoqueLog (CD_ESTOQUE,DESC_OPERACAO, DESC_COLUNA, VLR_ANTERIOR,VLR_ATUAL, DTH_OPERACAO) SELECT CD_ESTOQUE, @Operacao, @Coluna, @VlrAnt, @VlrAtu, getdate() FROM deleted endENDVamos testar a nossa trigger:INSERT INTOTBESTOQUE (CD_PRODUTO, QTD_ESTOQUE,CD_UNIDADE, VLR_UNITARIO, DTH_MOVIMENTO) VALUES (12,1,7,2.50,GETDATE())UPDATE TBESTOQUESET QTD_ESTOQUE = 2WHERE CD_ESTOQUE = 13DELETE FROM TBESTOQUE WHERECD_ESTOQUE = 13E o resultado da execucao da trigger e o mostrado abaixo:CD_EVENTO CD_ESTOQUE DESC_OPERACAODESC_COLUNA VLR_ANTERIOR VLR_ATUAL DTH_OPERACAO----------- ----------- ------------------------------------------- ------------------------------------------------------------ -----------------------22 21 INSERT 2013-08-2211:00:46.06023 21 UPDATE QTD_ESTOQUE 1.0000 2.0000 2013-08-2211:01:00.44024 21 DELETE 2013-08-2211:01:03.363(3 row(s) affected)Com um exemplo pratico mostramoscomo funcionam as TRIGGERS, espero que tenha ficado claro, qualquer duvida, eso comentar.Com essa serie de artigosprocuramos mostrar um pouco da linguagem SQL, como funcionam as operacoes viacodigo, espero que tenham gostado, e brevemente estaremos de volta com maisnovidades.Grande abraco e ate breve.Artigos anteriores:Desvendando o SQL - Parte I - IntroducaoDesvendando o SQL - Parte II - Criando um Banco de Dados e TabelasDesvendando o SQL - Parte III - Alterando RegistrosDesvendando o SQL - Parte IV - ConsultasDesvendando o SQL - Parte V - VisoesDesvendando o SQL - Parte VI - Estruturas Condicionais e de RepeticaoDesvendando o SQL - Parte VII - CursoresDesvendando o SQL - Parte VIII - Conversao de ValoresDesvendando o SQL - Parte IX - Procedimentos ArmazenadosDesvendando o SQL - Parte X - Funcoes