Usando Triggers

Novo aqui no site? Talvez gostaria de assinar o
RSS feed do site?

Publicado em: 02/02/2008
Área: SQL Server
Visualizações: 8.175
Comentário(s): 0

imprimir envie por e-mail compartilhe
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.


veja mais
Preencha o formulário para comentar:
Nome:*

E-mail:* (não será exibido)

Site: (http://)

Comentário:*

Deseja receber os comentários no e-mail?

Anti-spam: (nova imagem)





Seja o primeiro a comentar!

Autor da matéria
Thiago Carlos de Alencar
Formado em Tecnologia em Internet pela faculdade ENIAC-FAPI, Pós-Graduando em Tecnologia da Informação(ENIAC-FAPI). Trabalha atualmente como Analista de Banco d.

Todas as matérias de Thiago Carlos de Alencar

Publicidade
Seguir o Oficina da Net
RSS

RSS

RSS
Top matérias do mês
Matérias relacionadas
Tags

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