Usando Triggers

Publicado em: 02/02/2008  |  SQL Server  |  Visualizações: 6.750  |  0 Comentário(s)
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.
compartilhe
  Dica: Confira todo nosso conteúdo de SQL Server no site.
Links patrocinados
Últimos artigos do editor

Criando Tabelas E-Commerc.
Ola pessoal. Hoje vamos faz.
Criando um Banco de Dados.
Ola internautas, hoje escrev.
Dicas de otimização de co.
Ola pessoal estou aqui escre.
Opinião do leitor:
0 Comentário(s)
Acesso restrito
Destaques
Como assinar um RSS Como assinar um RSS
Aprenda a assinar um blog/site utilizando o agregador de notícias em formato RSS
Peixe Grande 2008 Peixe Grande 2008
O Oficina da Net está este ano participando do Projeto Peixe Grande 2008 na categoria de Blog. Ajude-nos vote!
iPhone 3G no Brasil iPhone 3G no Brasil
O smartphone da Apple chegou ao Brasil com a tecnologia de terceira geração de telefonia.
Links patrocinados
Autor
Tags
Artigos Relacionados
Novos Artigos
Notícias Relacionados
Assine nosso RSS

© 2005 - 2008 - Oficina da Net - v 3.0 - É proibida a reprodução parcial ou completa do conteúdo deste site sem autorização por escrito. Resolução adequada: 1024x768px.