• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Trigger

4 mensagens neste tópico

Bem mais uma dúvida para animar o fórum!

Esta é das díficeis, aqui vai!  :P

Tenho duas tabelas, uma chamada Encomendas e outra chamada Envios, estão relacionadas de 1 para muitos(uma encomenda tem muitos envios).

A tabela Encomendas está em DTS através de uma outra tabela do Sistema Principal chamada OrderGroup.

O meu problema é que isto está mais ou menos assim o resultado final :

Order_number      Envio

1                          1

1                          2

3                          1

Ora, eu preciso de um trigger que veja cada vez que for modificado uma encomenda do lado do Sistema, ele tem que ir á tabela envios e ver se essa encomenda já lá está, caso esteja então vai colocar um novo envio para ela com o mesmo order_number.

O trigger deve também verificar caso nao tenha sido inserida, trata-se então de uma encomenda nova e adicionar ao Envio como 1.

Alguem tem alguma ideia ??

ps: já agora, alguem sabe como usar IF em SQL ?

Fiz uma alteração, pensei no seguinte ( é a primeira vez que faço uma trigger, pode conter imensos erros)

CREATE TRIGGER envioUpdate ON [OrderGroup]
FOR UPDATE
AS
INSERT INTO Envio VALUES(i.order_number,i.n_envio,i.Data,i.ritmo_envio,i.order_status_code)
FROM inserted i,Envio

Erro:

Server: Msg 128, Level 15, State 1, Procedure envioUpdate, Line 4

The name 'order_number' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boax...

Não sei se é de mim, mas nao consigo pereber o que queres....

Falas da tabela encomenda... qual a relacao com as outras?

Order_number, é uma coluna de OrderGroup?

caso esteja então vai colocar um novo envio para ela com o mesmo order_number.

O trigger deve também verificar caso nao tenha sido inserida, trata-se então de uma encomenda nova e adicionar ao Envio como 1.

? ?

Encomenda alterada, vai inserir um novo envio com o mesmo order_number..  :eek:  qual é o order_number ?  no teu caso, alterando a encomenda 1, queres que fique  1 no order_number e 3 no envio?

se for uma encomenda nova, fica 4 no Order_number e 1 no envio ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gurzi não consegui entender bem a dúvida, ou melhor, entendi mas falta ai informação.

Assumindo que o que identifica a encomenda é id_encomenda, deve ser tipo isto:

CREATE TRIGGER [envioUpdate] ON [dbo].[Encomenda]
FOR UPDATE
AS  
IF 
EXISTS (SELECT encomenda
             FROM Envios ev, Encomenda e
             WHERE ev.id_encomenda=e.id_encomenda)
BEGIN
RAISERROR ('Mensagem a  mostrar...! ', 16, -1)
ROLLBACK TRANSACTION
END

NAO TESTEI

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já consegui :

CREATE TRIGGER UpdateEncomenda 
ON OrderGroup
FOR UPDATE
AS
DECLARE @order_number VARCHAR(100)
	DECLARE @order_status_code INTEGER
DECLARE @n_envio INTEGER

SET @order_number = ( SELECT order_number FROM Inserted)
SET @order_status_code = ( SELECT order_status_code FROM Inserted)


   
SET @n_envio = (SELECT MAX(n_envio) FROM Envio WHERE order_number = @order_number)

INSERT INTO Envio VALUES(@order_number,@n_envio + 1,GETDATE(),'transito',@order_status_code)

Agora só me falta conseguir por o DTS a bombar!

O DTS é que é mais complicado!

--------------------------------------------- Tentar Explicar melhor

Eu não posso modificar o Sistema principal, portanto eixste uma tabela chamada OrderGroup que eu através de um DTS quero buscar alguma info(só dos campos que pretendo) para uma tabela minha chamada Encomendas.

A tabela encomendas liga então a uma tabela chamada Envios.

O que acontece é o seguinte, imaginem que na tabela OrderGroup (Sistema) está a informação das encomendas, e essas encomendas tem estados, se alguem lhe muda o estado então isso implica que vai ser um novo envio, então automaticamente tenho que adicionar essa mesma encomenda à tabela Envios com um envio novo!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora