Usando Triggers

Esta coluna mostra com as triggers do Sql Server, podem nos ajudar e dar desempenhos às nossas aplicações. Evitando de repetir código várias vezes. Coluna criada ao so de Haruka Kanata

Por | @oficinadanet Programação
Triggers

Um Trigger é um bloco de comandos Transact-SQL que é automaticamente executado quando um comando INSERT , DELETE ou UPDATE for executado em uma tabela do banco de dados.
As Triggers são usadas para realizar tarefas relacionadas com validações, restrições de acesso, rotinas de segurança e consistência de dados ; desta forma estes controles deixam de ser executados pela aplicação e passam a ser executados pelos Triggers em determinadas situações:
•Quando temos que popular campos de tabelas que estão desatualizados.
•Em uma migração, com certeza envolverá uma trigger que ajude a manter a integridade dos dados.
Em uma situação que temos uma tabela de cliente, que nesta tabela o cliente tem uma coluna IdCliente, e a tabela de pedidos foi criada depois. Mas a única coisa que faz com que a tabela de clientes faça a referência a tabela de pedidos e o cnpj do cliente. Qual a solução que temos pra fazer com que o IdCliente seja gravado na tabela de pedidos, mantendo a integridade dos dados existente ? Trigger isso mesmo, Trigger.
A baixo segue o código da trigger que traz a solução, depois irei explicar o que cada linha de código faz.

Código da trigger.

Create trigger insereIdcliente
On pedido
FOR INSERT
AS
DECLARE @num_error INT
DECLARE @msgerror VARCHAR(255)
UPDATE ped SET  ClienteId = cli.IdCliente
FROM pedido ped
JOIN cliente cli
ON  ped.cnpjPed9 = cli.cnpj9
AND   ped.cnpjPed4 = cli.cnpj4
AND   ped.cnpjPed2 = cli.cnpj2
JOIN INSERTED I
ON  i.cnpjPed9 = cli.cnpj9
AND   i.cnpjPed4 = cli.cnpj4
AND   i.cnpjPed2 = cli.cnpj2  
  SET @num_error = @@error
   IF @num_error <> 0
   BEGIN
    SET @msgerror = 'Problemas ao gravar o IdCliente na tabela de pedidos :' + CONVERT(VARCHAR,ISNULL(@num_error, -1))
    RAISERROR (@msgerror, 16, 1)
    RETURN
   END


Explicando o código.

Crio a trigger  insereIdcliente e associo ela á tabela pedido.
Na terceira linha que dizer que toda vez que tiver um comando insert nesta tabela ele fará os procedimentos abaixo.
Como preciso atualizar os dados que já estão inseridos e manter a integridade do mesmo os atualizo usando um UPDATE FROM, usando um JOIN para que os dados entre a tabela pedido e clientes sejam comparados.
No segundo JOIN, faço uma JOIN com a tabela INSERTED. O que é esta tabela? É que no momento em que a tabela sofre uma INSERT ela é criada, sendo que podemos recuperar os dados inseridos naquele momento.
Assim o JOIN se torna mais eficiente.
Ao fim do código seto a variável  @num_error com o valor da variável do sistema @@error, e abaixo um IF para saber se a alteração de dados ocorreu bem, caso contrário seto a variável @msgerror com uma mensagem que o SQL retorna  para o usuário.

Mais sobre: trigger sql sql server
Share Tweet
Recomendado
Comentários
Carregar comentários
Destaquesver tudo