SlideShare uma empresa Scribd logo
1 de 30
TRIGGERS Claudio Stein Junior
Tradução Gatilhos Disparadores
O que são TRIGGERS Um trigger é um tipo especial de procedimento armazenado, que é executado sempre que há uma tentativa de modificar os dados de uma tabela que é protegida por ele.
Associados a uma tabela Os TRIGGERS são definidos em uma tabela específica, que é denominada tabela de TRIGGERS;
Chamados Automaticamente Quando há uma tentativa de inserir, atualizar ou excluir os dados em uma tabela, e um TRIGGER tiver sido definido na tabela para essa ação específica, ele será executado automaticamente, não podendo nunca ser ignorado.
Não podem ser chamados diretamente Ao contrário dos procedimentos armazenados do sistema, os disparadores não podem ser chamados diretamente e não passam nem aceitam parâmetros.
É parte de uma transação O TRIGGER e a instrução que o aciona são tratados como uma única transação, que poderá ser revertida em qualquer ponto do procedimento, caso você queria usar “ROLLBACK”, conceitos que veremos mais a frente.
Orientações básicas As definições de TRIGGERS podem conter uma instrução “ROLLBACK TRANSACTION”, mesmo que não exista uma instrução explícita de “BEGIN TRANSACTION”;
Orientações básicas Se uma instrução “ROLLBACK TRANSACTION” for encontrada, então toda a transação (o TRIGGER e a instrução que o disparou) será revertida ou desfeita. Se uma instrução no script do TRIGGER seguir uma instrução “ROLLBACK TRANSACTION”, a instrução será executada, então, isso nos obriga a ter uma condição IF contendo uma cláusula RETURN para impedir o processamento de outras instruções.
Orientações básicas Não é uma boa prática utilizar “ROLLBACK TRANSACTION” dentro de seus TRIGGERS, pois isso gerará um retrabalho, afetando muito no desempenho de seu banco de dados, pois toda a consistência deverá ser feita quando uma transação falhar, lembrando que tanto a instrução quanto o TRIGGER formam uma única transação. O mais indicado é validar as informações fora das transações com TRIGGER para então efetuar, evitando que a transação seja desfeita.
Orientações básicas Para que um TRIGGER seja disparado, o usuário o qual entrou com as instruções, deverá ter permissão de acessar tanto a entidade e consequentemente ao TRIGGER.
Usos e aplicabilidade dos TRIGGERS Impor uma integridade de dados mais complexa do que uma restrição CHECK; Definir mensagens de erro personalizadas; Manter dados desnormalizados; Comparar a consistência dos dados – posterior e anterior – de uma instrução UPDATE;
Como usar? Os TRIGGERS são usados com enorme eficiência para impor e manter integridade referencial de baixo nível, e não para retornar resultados de consultas. A principal vantagem é que eles podem conter uma lógica de processamento complexa.
Como usar Você pode usar TRIGGERS para atualizações e exclusões em cascata através de tabelas relacionadas em um banco de dados, impor integridades mais complexas do que uma restrição CHECK, definir mensagens de erro personalizadas, manter dados desnormalizados e fazer comparações dos momentos anteriores e posteriores a uma transação.
Como usar Quando queremos efetuar transações em cascata, por exemplo, um TRIGGER de exclusão na tabela PRODUTOdo banco de dados Northwind pode excluir os registros correspondentes em outras tabelas que possuem registros com os mesmos valores de PRODUCTID excluídos para que não haja quebra na integridade, como a dito popular “pai pode não ter filhos, mas filhos sem um pai é raro”.
Você pode utilizar os TRIGGERS para impor integridade referencial Executando uma ação ou atualizações e exclusões em cascata: 	A integridade referencial pode ser definida através do uso das restrições FOREIGNKEY e REFERENCE, com a instrução CREATE TABLE. Os TRIGGERS fazem bem o trabalho de checagem de violações e garantem que haja coerência de acordo com a sua regra de negócios. Se você exclui um cliente, de certo, você terá que excluir também todo o seu histórico de movimentações. Não seria boa coisa se somente uma parte desta transação acontecesse.
Você pode utilizar os TRIGGERS para impor integridade referencial   Criando disparadores de vários registros: Quando mais de um registro é atualizado, inserido ou excluído, você deve implementar um TRIGGER para manipular vários registros.
CRIANDO TRIGGERS As TRIGGERS são criadas utilizando a instrução CREATE TRIGGER que especifica a tabela onde ela atuará, para que tipo de ação ele irá disparar suas ações seguido pela instrução de conferência para disparo da ação.  E meio a esses comandos, temos algumas restrições para o bom funcionamento. O SQL Server não permite que as instruções a seguir, sejam utilizadas na definição de uma TRIGGER:
Comandosnãopermitidos ALTER DATABASE; CREATE DATABASE; DISKINIT; DISKRESIZE; DROP DATABASE; LOAD DATABASE; LOAD LOG; RECONFIGURE; REATORE DATABASE; RESTORELOG.
Comandos Caso você queira determinar referencias que um TRIGGER faz a objetos, execute o procedimento armazenado do sistema sp_depends, criando o seguinte comando:  EXEC SP_DEPENDS @OBJNAME = fornecedores
Comandos Para determinar os TRIGGERS existentes em um objeto específico e suas ações, execute o procedimento armazenado do sistema sp_helptrigger, criando o seguinte comando: EXEC SP_HELPTRIGGER @TABNAME = fornecedores
COMO FUNCIONAM OS TRIGGERS Quando incluímos, excluímos ao alteramos algum registro em um banco de dados, são criadas tabelas temporárias que passam a conter os registros excluídos, inseridos e também o antes e depois de uma atualização. Quando você exclui um determinado registro de uma tabela, na verdade você estará apagando a referência desse registro, que ficará, após o DELETE, numa tabela temporária de nome DELETED. Um TRIGGER implementado com uma instrução SELECT poderá lhe trazer todos ou um número de registro que foram excluídos. Assim como acontece com DELETE, também ocorrerá com inserções em tabelas, podendo obter os dados ou o número de linhas afetadas buscando na tabela INSERTED.
COMO FUNCIONAM OS TRIGGERS Já no UPDATE ou atualização de registros em uma tabela, temos uma variação e uma concatenação para verificar o antes e o depois. De fato, quando executamos uma instrução UPDATE, a “engine” de qualquer banco de dados tem um trabalho semelhante, primeiro exclui os dados tupla e posteriormente faz a inserção do novo registro que ocupará aquela posição na tabela, ou seja, um DELETE seguido por um INSERT. Quando então, há uma atualização, podemos buscar o antes e o depois, pois o antes estará na tabela DELETED e o depois estará na tabela INSERTED. Nada nos impede de retornar dados das tabelas temporárias (INSERTED, DELETED) de volta às tabelas de nosso banco de dados, mas atente-se, os dados manipulados são temporários assim como as tabelas e só estarão disponíveis nesta conexão. Após fechar, as tabelas e os dados não serão mais acessíveis.
TRIGGER INSERT CREATE TRIGGER TRG_ONInsertValue ON Marcas FOR INSERT AS   IF (SELECT COUNT(*) FROM INSERTED) = 1      PRINT 'O registro foi inserido com sucesso!' GO insert into Marcas values('Wise')
TRIGGER Delete Quando um registro é acrescentado a tabela temporária DELETED, ele deixa de existir na tabela do banco de dados. Portanto, a tabela DELETED, não apresentará registros em comum com as tabelas do banco de dados; É alocado espaço na memória para criar a tabela DELETED, que está sempre em cache; Um TRIGGER para uma ação DELETE não é executado para a instrução TRUNCATE TABLE porque a mesma não é registrada no log de transações.
TRIGGER Delete CREATE TRIGGER TRG_ONDeletetValue ON Marcas FOR DELETE AS   IF (SELECT COUNT(*) FROM DELETED) = 1 begin      RAISERROR ('Marcas não podem ser excluídas!',16,1)      ROLLBACK TRANSACTION END DELETE  FROM Marcas WHERE Marca = 'LG'
TRIGGER UPDATE Partindo então do princípio que uma instrução UPDATE apresenta as duas etapas, as quais já citamos, com ela podemos verificar o antes e o depois, já que os dados estarão disponíveis nas tabelas temporárias DELETED – momento anterior – INSERTED – momento atual, logo após o UPDATE.
TRIGGER Update CREATE TRIGGER trgUpdateValueMarcas ON marcas FOR UPDATE AS 	IF (SELECT COUNT(*) FROM DELETED) <> 0 SELECt * FROM DELETED 		SELECT * FROM INSERTED GO update marcas set marca = 'SONY' where marca = 'lg'
TRIGGER Update update marcas set marca = 'SONY' where marca = 'lg'
Boas Práticas Utilize TRIGGER somente quando necessário; Quando for utilizar, que ele seja o mais simples possível; TRIGGERS não tem um bom suporte a muitas transações; Dependendo de como forem definidas, podem originar problemas com performances; Minimize o quanto puder instruções ROLLBACK em TRIGGERS;

Mais conteúdo relacionado

Mais procurados

Padronização de Nomenclatura para Banco de Dados
Padronização de Nomenclatura para Banco de DadosPadronização de Nomenclatura para Banco de Dados
Padronização de Nomenclatura para Banco de Dados
Samuelson Brito
 
SOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a ServiçosSOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a Serviços
alinebicudo
 
Reuso de software
Reuso de softwareReuso de software
Reuso de software
rebekinha
 
Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1
Pacc UAB
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
julianaveregue
 

Mais procurados (20)

Padronização de Nomenclatura para Banco de Dados
Padronização de Nomenclatura para Banco de DadosPadronização de Nomenclatura para Banco de Dados
Padronização de Nomenclatura para Banco de Dados
 
UML
UMLUML
UML
 
Trabalho sobre a ISO/IEC 15504
Trabalho sobre a ISO/IEC 15504Trabalho sobre a ISO/IEC 15504
Trabalho sobre a ISO/IEC 15504
 
SOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a ServiçosSOA - Arquitetura Orientada a Serviços
SOA - Arquitetura Orientada a Serviços
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQL
 
Customização RM Fluxus - TOTVS - Rateio por Centro de Custo e Natureza Orç. F...
Customização RM Fluxus - TOTVS - Rateio por Centro de Custo e Natureza Orç. F...Customização RM Fluxus - TOTVS - Rateio por Centro de Custo e Natureza Orç. F...
Customização RM Fluxus - TOTVS - Rateio por Centro de Custo e Natureza Orç. F...
 
Reuso de software
Reuso de softwareReuso de software
Reuso de software
 
Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1Aula 8 - Repetição PARA ATÉ - parte 1
Aula 8 - Repetição PARA ATÉ - parte 1
 
Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01   Curso de HTML5 - Aula 01
Curso de HTML5 - Aula 01
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Introdução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de SoftwareIntrodução à Qualidade e Testes Ágeis de Software
Introdução à Qualidade e Testes Ágeis de Software
 
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
Banco de Dados II Aula 11 - Gerenciamento de transação (transações - fundamen...
 
Rm reports gerador de relatórios versão - mdi
Rm reports   gerador de relatórios versão - mdiRm reports   gerador de relatórios versão - mdi
Rm reports gerador de relatórios versão - mdi
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Junções e subconsultas
Junções e subconsultasJunções e subconsultas
Junções e subconsultas
 
Banco de Dados - MySQL Basico
Banco de Dados - MySQL BasicoBanco de Dados - MySQL Basico
Banco de Dados - MySQL Basico
 
Modelo conceitual fisico_logico_er[1]
Modelo conceitual fisico_logico_er[1]Modelo conceitual fisico_logico_er[1]
Modelo conceitual fisico_logico_er[1]
 
Aula 1 - Introdução a Engenharia de Software
Aula 1 -  Introdução a Engenharia de SoftwareAula 1 -  Introdução a Engenharia de Software
Aula 1 - Introdução a Engenharia de Software
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
TOTVS Gestão de Estoque, Compras e Faturamento - Novidades 11.40
TOTVS Gestão de Estoque, Compras e Faturamento - Novidades 11.40TOTVS Gestão de Estoque, Compras e Faturamento - Novidades 11.40
TOTVS Gestão de Estoque, Compras e Faturamento - Novidades 11.40
 

Semelhante a Triggers no SQL Server

Modulo-02-Aula-04-certificao-sqlser.pptx
Modulo-02-Aula-04-certificao-sqlser.pptxModulo-02-Aula-04-certificao-sqlser.pptx
Modulo-02-Aula-04-certificao-sqlser.pptx
AugustoNicolau2
 

Semelhante a Triggers no SQL Server (20)

Net Coders Ladies SQL
Net Coders Ladies SQL Net Coders Ladies SQL
Net Coders Ladies SQL
 
UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6UNIFAL - MySQL Triggers - 5.0/5.6
UNIFAL - MySQL Triggers - 5.0/5.6
 
Modulo-02-Aula-04-certificao-sqlser.pptx
Modulo-02-Aula-04-certificao-sqlser.pptxModulo-02-Aula-04-certificao-sqlser.pptx
Modulo-02-Aula-04-certificao-sqlser.pptx
 
Utilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggersUtilizando views, stored procedures e triggers
Utilizando views, stored procedures e triggers
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
MySQL Query Optimization
MySQL Query OptimizationMySQL Query Optimization
MySQL Query Optimization
 
Aula09 - PL SQL - Subprogramas.pptx
Aula09 - PL SQL - Subprogramas.pptxAula09 - PL SQL - Subprogramas.pptx
Aula09 - PL SQL - Subprogramas.pptx
 
Apostila de sql
Apostila de sqlApostila de sql
Apostila de sql
 
Aprofundamento de DDL e DML
Aprofundamento de DDL e DMLAprofundamento de DDL e DML
Aprofundamento de DDL e DML
 
Refactoring Databases - Estrategias
Refactoring Databases - EstrategiasRefactoring Databases - Estrategias
Refactoring Databases - Estrategias
 
2832014 curso plsql
2832014 curso plsql2832014 curso plsql
2832014 curso plsql
 
Treinamento Oracle Forms
Treinamento Oracle FormsTreinamento Oracle Forms
Treinamento Oracle Forms
 
Triggers
TriggersTriggers
Triggers
 
wepik-introducao-aos-conceitos-de-sql-20230620200232U48s.pdf
wepik-introducao-aos-conceitos-de-sql-20230620200232U48s.pdfwepik-introducao-aos-conceitos-de-sql-20230620200232U48s.pdf
wepik-introducao-aos-conceitos-de-sql-20230620200232U48s.pdf
 
Modulo 15 PSI
Modulo 15 PSIModulo 15 PSI
Modulo 15 PSI
 
Aula1
Aula1Aula1
Aula1
 
Armazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL ServerArmazenamento Temporário e CTEs - SQL Server
Armazenamento Temporário e CTEs - SQL Server
 
Oracle 11g resumo
Oracle 11g resumoOracle 11g resumo
Oracle 11g resumo
 
Db2
Db2Db2
Db2
 

Último

Último (8)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Triggers no SQL Server

  • 3. O que são TRIGGERS Um trigger é um tipo especial de procedimento armazenado, que é executado sempre que há uma tentativa de modificar os dados de uma tabela que é protegida por ele.
  • 4. Associados a uma tabela Os TRIGGERS são definidos em uma tabela específica, que é denominada tabela de TRIGGERS;
  • 5. Chamados Automaticamente Quando há uma tentativa de inserir, atualizar ou excluir os dados em uma tabela, e um TRIGGER tiver sido definido na tabela para essa ação específica, ele será executado automaticamente, não podendo nunca ser ignorado.
  • 6. Não podem ser chamados diretamente Ao contrário dos procedimentos armazenados do sistema, os disparadores não podem ser chamados diretamente e não passam nem aceitam parâmetros.
  • 7. É parte de uma transação O TRIGGER e a instrução que o aciona são tratados como uma única transação, que poderá ser revertida em qualquer ponto do procedimento, caso você queria usar “ROLLBACK”, conceitos que veremos mais a frente.
  • 8. Orientações básicas As definições de TRIGGERS podem conter uma instrução “ROLLBACK TRANSACTION”, mesmo que não exista uma instrução explícita de “BEGIN TRANSACTION”;
  • 9. Orientações básicas Se uma instrução “ROLLBACK TRANSACTION” for encontrada, então toda a transação (o TRIGGER e a instrução que o disparou) será revertida ou desfeita. Se uma instrução no script do TRIGGER seguir uma instrução “ROLLBACK TRANSACTION”, a instrução será executada, então, isso nos obriga a ter uma condição IF contendo uma cláusula RETURN para impedir o processamento de outras instruções.
  • 10. Orientações básicas Não é uma boa prática utilizar “ROLLBACK TRANSACTION” dentro de seus TRIGGERS, pois isso gerará um retrabalho, afetando muito no desempenho de seu banco de dados, pois toda a consistência deverá ser feita quando uma transação falhar, lembrando que tanto a instrução quanto o TRIGGER formam uma única transação. O mais indicado é validar as informações fora das transações com TRIGGER para então efetuar, evitando que a transação seja desfeita.
  • 11. Orientações básicas Para que um TRIGGER seja disparado, o usuário o qual entrou com as instruções, deverá ter permissão de acessar tanto a entidade e consequentemente ao TRIGGER.
  • 12. Usos e aplicabilidade dos TRIGGERS Impor uma integridade de dados mais complexa do que uma restrição CHECK; Definir mensagens de erro personalizadas; Manter dados desnormalizados; Comparar a consistência dos dados – posterior e anterior – de uma instrução UPDATE;
  • 13. Como usar? Os TRIGGERS são usados com enorme eficiência para impor e manter integridade referencial de baixo nível, e não para retornar resultados de consultas. A principal vantagem é que eles podem conter uma lógica de processamento complexa.
  • 14. Como usar Você pode usar TRIGGERS para atualizações e exclusões em cascata através de tabelas relacionadas em um banco de dados, impor integridades mais complexas do que uma restrição CHECK, definir mensagens de erro personalizadas, manter dados desnormalizados e fazer comparações dos momentos anteriores e posteriores a uma transação.
  • 15. Como usar Quando queremos efetuar transações em cascata, por exemplo, um TRIGGER de exclusão na tabela PRODUTOdo banco de dados Northwind pode excluir os registros correspondentes em outras tabelas que possuem registros com os mesmos valores de PRODUCTID excluídos para que não haja quebra na integridade, como a dito popular “pai pode não ter filhos, mas filhos sem um pai é raro”.
  • 16. Você pode utilizar os TRIGGERS para impor integridade referencial Executando uma ação ou atualizações e exclusões em cascata: A integridade referencial pode ser definida através do uso das restrições FOREIGNKEY e REFERENCE, com a instrução CREATE TABLE. Os TRIGGERS fazem bem o trabalho de checagem de violações e garantem que haja coerência de acordo com a sua regra de negócios. Se você exclui um cliente, de certo, você terá que excluir também todo o seu histórico de movimentações. Não seria boa coisa se somente uma parte desta transação acontecesse.
  • 17. Você pode utilizar os TRIGGERS para impor integridade referencial   Criando disparadores de vários registros: Quando mais de um registro é atualizado, inserido ou excluído, você deve implementar um TRIGGER para manipular vários registros.
  • 18. CRIANDO TRIGGERS As TRIGGERS são criadas utilizando a instrução CREATE TRIGGER que especifica a tabela onde ela atuará, para que tipo de ação ele irá disparar suas ações seguido pela instrução de conferência para disparo da ação. E meio a esses comandos, temos algumas restrições para o bom funcionamento. O SQL Server não permite que as instruções a seguir, sejam utilizadas na definição de uma TRIGGER:
  • 19. Comandosnãopermitidos ALTER DATABASE; CREATE DATABASE; DISKINIT; DISKRESIZE; DROP DATABASE; LOAD DATABASE; LOAD LOG; RECONFIGURE; REATORE DATABASE; RESTORELOG.
  • 20. Comandos Caso você queira determinar referencias que um TRIGGER faz a objetos, execute o procedimento armazenado do sistema sp_depends, criando o seguinte comando: EXEC SP_DEPENDS @OBJNAME = fornecedores
  • 21. Comandos Para determinar os TRIGGERS existentes em um objeto específico e suas ações, execute o procedimento armazenado do sistema sp_helptrigger, criando o seguinte comando: EXEC SP_HELPTRIGGER @TABNAME = fornecedores
  • 22. COMO FUNCIONAM OS TRIGGERS Quando incluímos, excluímos ao alteramos algum registro em um banco de dados, são criadas tabelas temporárias que passam a conter os registros excluídos, inseridos e também o antes e depois de uma atualização. Quando você exclui um determinado registro de uma tabela, na verdade você estará apagando a referência desse registro, que ficará, após o DELETE, numa tabela temporária de nome DELETED. Um TRIGGER implementado com uma instrução SELECT poderá lhe trazer todos ou um número de registro que foram excluídos. Assim como acontece com DELETE, também ocorrerá com inserções em tabelas, podendo obter os dados ou o número de linhas afetadas buscando na tabela INSERTED.
  • 23. COMO FUNCIONAM OS TRIGGERS Já no UPDATE ou atualização de registros em uma tabela, temos uma variação e uma concatenação para verificar o antes e o depois. De fato, quando executamos uma instrução UPDATE, a “engine” de qualquer banco de dados tem um trabalho semelhante, primeiro exclui os dados tupla e posteriormente faz a inserção do novo registro que ocupará aquela posição na tabela, ou seja, um DELETE seguido por um INSERT. Quando então, há uma atualização, podemos buscar o antes e o depois, pois o antes estará na tabela DELETED e o depois estará na tabela INSERTED. Nada nos impede de retornar dados das tabelas temporárias (INSERTED, DELETED) de volta às tabelas de nosso banco de dados, mas atente-se, os dados manipulados são temporários assim como as tabelas e só estarão disponíveis nesta conexão. Após fechar, as tabelas e os dados não serão mais acessíveis.
  • 24. TRIGGER INSERT CREATE TRIGGER TRG_ONInsertValue ON Marcas FOR INSERT AS IF (SELECT COUNT(*) FROM INSERTED) = 1 PRINT 'O registro foi inserido com sucesso!' GO insert into Marcas values('Wise')
  • 25. TRIGGER Delete Quando um registro é acrescentado a tabela temporária DELETED, ele deixa de existir na tabela do banco de dados. Portanto, a tabela DELETED, não apresentará registros em comum com as tabelas do banco de dados; É alocado espaço na memória para criar a tabela DELETED, que está sempre em cache; Um TRIGGER para uma ação DELETE não é executado para a instrução TRUNCATE TABLE porque a mesma não é registrada no log de transações.
  • 26. TRIGGER Delete CREATE TRIGGER TRG_ONDeletetValue ON Marcas FOR DELETE AS IF (SELECT COUNT(*) FROM DELETED) = 1 begin RAISERROR ('Marcas não podem ser excluídas!',16,1) ROLLBACK TRANSACTION END DELETE FROM Marcas WHERE Marca = 'LG'
  • 27. TRIGGER UPDATE Partindo então do princípio que uma instrução UPDATE apresenta as duas etapas, as quais já citamos, com ela podemos verificar o antes e o depois, já que os dados estarão disponíveis nas tabelas temporárias DELETED – momento anterior – INSERTED – momento atual, logo após o UPDATE.
  • 28. TRIGGER Update CREATE TRIGGER trgUpdateValueMarcas ON marcas FOR UPDATE AS IF (SELECT COUNT(*) FROM DELETED) <> 0 SELECt * FROM DELETED SELECT * FROM INSERTED GO update marcas set marca = 'SONY' where marca = 'lg'
  • 29. TRIGGER Update update marcas set marca = 'SONY' where marca = 'lg'
  • 30. Boas Práticas Utilize TRIGGER somente quando necessário; Quando for utilizar, que ele seja o mais simples possível; TRIGGERS não tem um bom suporte a muitas transações; Dependendo de como forem definidas, podem originar problemas com performances; Minimize o quanto puder instruções ROLLBACK em TRIGGERS;