De volta com nosso ultimo artigoda serie sobre a linguagem SQL, caso nao tenha acompanhado os artigosanteriores, no final do artigo coloco o link para os anteriores. Hoje vamosmostrar como funcionam as TRIGGERS ou como alguns conhecem os GATILHOS do SQL.Boa leitura a todos.DEFINICAOOs gatilhos sao um tipo especialde procedimento armazenado que e executado automaticamente na ocorrencia deeventos no banco de dados. Existem os gatilhos DML queocorrem no momento da modificacao dos dados de uma tabela, ou seja, quandoestamos manipulando os dados, quando executados INSERTS, UPDATE E DELETES, esao disparados quando um evento valido e acionado.Existem tambem os gatilhos DDLque ocorrem no momento da definicao dos dados do banco, eventos esses quecorrespondem as instrucoes CREATE, ALTER e DROP.Pela sua caracteristicaautomatica, a seguranca na sua utilizacao e execucao deve ser levada emconsideracao para evitarmos a utilizacao de forma mal-intencionada.SINTAXEComo em outras instrucoes vistasem artigos anteriores a sintaxe de construcao pode mostrar varias opcoes, masprocuramos mostrar sempre uma forma mais simples visando os principiantes, casodesejem pode pesquisar as outras inumeras opcoes existentes.Para instrucoes DML (Insert, Update ou Delete)CREATE TRIGGER < nome da trigger >ON < tabela | visao >FOR | AFTER | INSTEAD OF[ INSERT ] [ , ] [ UPDATE ] [ , ][ DELETE ] AS<Instrucoes de execucao >Para instrucoes DDL (Create, Alter ou Drop)CREATE TRIGGER < nome da trigger >ON { ALL SERVER | DATABASE } { FOR | AFTER } { event_type | event_group } [,...n ]AS<Instrucoes de execucao >LIMITACOESNao inclua instrucoes SELECT queretornem resultados ou instrucoes que executem atribuicao de variavel em umgatilho. Um gatilho que inclua instrucoes SELECT que retornem resultadosao usuario ou instrucoes que executam atribuicao de variavel requer umtratamento especial;Os resultados retornados devemser gravados em todos os aplicativos nos quais as modificacoes na tabela degatilhos sao permitidas. Se uma atribuicao de variavel tiver de ocorrer emum gatilho, use a instrucao SET NOCOUNT no inicio do gatilho para evitar oretorno de algum conjunto de resultados;As instrucoes seguintes nao podemser utilizadas em gatilhos DML:ALTER DATABASECREATE DATABASEDROP DATABASERESTORE DATABASERESTORE LOGRECONFIGUREALTER TABLE, quando adicionar,modificar ou deletar colunas; alternar particoes e adicionar ou deletar chavesprimarias ou unicas.ANINHAMENTO DE GATILHOSGatilhos aninhados podem serutilizados ate o 32o nivel. Recomenda o cuidado em sua utilizacao visando aperformance do banco de dadosEXEMPLOSVamos criar uma tabela de log doestoque para o nosso banco, assim sempre que for incluido, alterado ou deletadoalgum registro, vamos guardar a informacao.Primeiro vamos a criacao databela de log que vamos chamar de TBEstoqueLog.CREATE TABLETBEstoqueLog( CD_EVENTO INT NOTNULL IDENTITY, CD_ESTOQUE INT NOT NULL, DESC_OPERACAO VARCHAR(10) NOT NULL, DESC_COLUNA VARCHAR(30) NULL, VLR_ANTERIOR VARCHAR(30) NULL, VLR_ATUAL VARCHAR(30) NULL, DTH_OPERACAO DATETIME NOT NULL )EXECUTE SP_ADDEXTENDEDPROPERTY 'MS_DESCRIPTION', 'Tabela de Log dos Estoque', 'USER', 'DBO','TABLE', 'TBEstoqueLog'GOALTER TABLETBEstoqueLog ADD CONSTRAINTPK_LOGE PRIMARY KEY (CD_EVENTO)GOVamos ter uma coluna de codigo decontrole da tabela, o codigo do estoque que esta sendo alterado, qual aoperacao (insert, update ou delete), qual a coluna alterada, somente quando forupdate, o valor anterior e atual e a data que foi realizado.Depois de criada a tabela vamoscriar nossa TRIGGER:CREATE TRIGGERTgEstLog ON TBEstoque AFTER INSERT,UPDATE,DELETEAS BEGIN DECLARE @Operacao VARCHAR(15), @Coluna VARCHAR(30), @VlrAnt VARCHAR(15), @VlrAtu VARCHAR(15) SET @Operacao = NULL