Array
(
)

Inserção de dados entre tabelas com trigger

Ricardo78
   - 09 jun 2006

Bom dia para todos.

Por favor, estou precisando de ajuda para montar uma trigger. Estudei pelo livro que tenho, olhei todos os tópicos e até achei um postado pela scristina que se aproxima bastante do meu problema, mas eu não consegui entender. E tenho pra mim que o meu problema está relacionado justamente com as tabela inserted e deleted da trigger. Acho que eu não entendi direito como elas funcionam ou talvez eu não possa fazer o detalhe que quero com uma trigger.

Bom, sem mais delongas...

A trigger que fiz é seguinte:

CREATE TRIGGER T_TRANSF ON TITMMOV
AFTER INSERT AS
BEGIN
INSERT INTO TITMMOVRATDEP SELECT TITMMOV.CODCOLIGADA, TITMMOV.IDMOV, TITMMOV.NSEQITMMOV, TITMMOV.CODFILIAL,
TITMMOV.CODTB1FLX, TITMMOV.QUANTIDADE*TITMMOV.PRECOUNITARIO, 100 FROM TITMMOV
END

Eu preciso passar as informações da tabela TITMMOV para a TITMMOVRATDEP toda vez que a tabela TITMMOV receber novas informações. Tô achando que eu preciso colocar a tabela inserted em algum lugar. Já fiz uns testes mas não funcionou.

Alguém sabe o que devo fazer?

Desde já, agradeço e fico na torcida.

Valeu pessoal.

Wcrivelini
   - 09 jun 2006

Cara, me parece que vc está errando apenas no FROM.
Usando FROM TITMMOV, pra cada registro que vc inserir em TITMMOV, o trigger vai inserir TODOS os registros da tabela TITMMOV na tabela TITMMOVRATDEP

Me parece que o que vc queria fazer é só inserir o novo registro. Então use FROM INSERTED

Ricardo78
   - 09 jun 2006

Pois é amigão. Enquanto aguardava a resposta de alguém e depois de estudar sobre as tabelas inserted e deleted das triggers, resolvi trocar para ver se dava certo. Mas não funcionou. :(
Tô começando a achar que preciso detalhar mais o select do insert, pois alguns campos que necessito fazem parte da tabela TITMMOV mas tem origem em outras tabelas. Devo precisar fazer alguns relacionamentos, não acha?!
Se tiver alguma outra idéia, por favor, me avise. Toda ajuda será bem vinda e agradecida desde já. :wink:

Saudações a todos.

Psergio.p
   - 15 jun 2006

Caro amigo, você tem que fazer assim:

CREATE TRIGGER T_TRANSF ON TITMMOV
AFTER INSERT AS
BEGIN
INSERT INTO TITMMOVRATDEP SELECT CODCOLIGADA, IDMOV, NSEQITMMOV,CODFILIAL,
CODTB1FLX,QUANTIDADE*PRECOUNITARIO, 100 FROM inserted
END

:D

Ricardo78
   - 16 jun 2006

Bom dia, psergio.p.

Tentei desta forma como o wcrivelini havia dito também, mas não funcionou. Parece que eu tenho que detalhar mais a minha pesquisa e estudar mais as amarrações das tabelas do banco.
Se tiver outra idéia, agradeço desde já.
De qualquer maneira, muito obrigado pela ajuda. :)

Até +.

Psergio.p
   - 16 jun 2006

Caro amigo, tem alguma coisa errada, esta maneira é correta sim! Posta a mensagem de erro ou a estrutura das tabelas para eu analisar!!