Usando Triggers
Canal: SQL Server | Autor: Thiago Carlos de Alencar | Publicado em: 02/02/2008 | Views: 14.741Triggers
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.
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.
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
ENDExplicando 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.
Esta obra está licenciada sob uma Licença Creative Commons. Você pode copiar, distribuir, exibir, executar, desde que seja dado
crédito ao autor original (Citando nome do autor, data, local e link de onde tirou o texto). Você não pode fazer uso comercial desta obra.
Você não pode criar obras derivadas.
Vote no artigo:
Artigo anterior
Dicas de otimização de consult.
Ola pessoal estou aqui escrevendo a mi. Próximo artigo
Índices no SQL Server 2000
Dicas de otimização de consult.
Ola pessoal estou aqui escrevendo a mi. Próximo artigo
Índices no SQL Server 2000
Veja matérias relacionadas com o assunto:
| 25/02/2010 | Trigger |








