Pegar os valores dos campos dinamicamente pela TRIGGER

31/08/2007

0

SQL

Alguém sabe como pegar os valores de uma tabela na TRIGGER estou fazendo uma rotina para uma tabela de LOG. Fiz uma rotina que consegue trazer todos os campos de qualquer tabela. Mas não consigo trazer dinamicamente os valores dos campos correspondentes.

Obs estou fazendo em sybase, mas acho que a lógica é para qualquer banco.


Acacio

Acacio

Responder

Posts

09/09/2007

Werlon Goulart

Em triggers do Sybase temos 2 tabelas que contém os valores atuais e os valores novos das colunas que estão sendo alterados/inseridos/deletados.
Em uma trigger de Insert por exemplo vc terá somente a tabela de Inserted onde estarão os valores das colunas que vc está inserindo na sua tabela;

Em trigger de Update vc terá na INSERTED o valor NOVO das colunas, ou seja o valor que vc alterou na sua tabela, e na DELETED o valor ATUAL (já que somente ápos a trigger os valores serão assumidos) das colunas.

Então em uma trigger de Update vc pode fazer um
select @coluna1 = coluna1,
@coluna2 = coluna2,
@coluna3 = coluna3
from Inserted
where coluna1 = @coluna1 --Neste caso a chave da tabela.

Onde vc teria os valores das colunas que estão sendo gravados.

Então em uma trigger de Delete vc pode fazer um
select @coluna1 = coluna1,
@coluna2 = coluna2,
@coluna3 = coluna3
from Deleted
where coluna1 = @coluna1 --Neste caso a chave da tabela.

Onde vc teria os valores atuais das colunas.

Poderia até fazer uma junção entre elas (Join);
Então em uma trigger de Update vc pode fazer algo do tipo:

select @coluna1 = I.coluna1,
@coluna2 = I.coluna2,
@coluna3 = D.coluna3
from Inserted I,
Deleted D
where I. coluna1 = @coluna1
and D.coluna1 = I.coluna1

Em triggers de Delete temos apenas a tabela de Deleted.
Em triggers de Insert temos apenas a tabela de Inserted.
Um abraço
Werlon Goulart


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar