Trigger

20/05/2005 - 16:52 por Juan F Botero | Informe spam
saludos

tengo un problema con este trigger. se supone que cuando actualice el valor
de terminado de la tabla oficha, el trigger deberia cambiar el estado de la
tabla oficha_evt_oficha.
pero al instalarlo, e insertar un nuevo registro, el trigger se dispara.
pero se supone que no se debe disparar para in insert sino para un update y
solo del campo terminado.

alguna sugerencia?

Otra pregunta seria si se puede tener dos sentencia sql dentro del mismo
trigger como esta este?

Gracias por sus comentarios


CREATE TRIGGER [hl7_oficha] ON [oficha]
FOR UPDATE
AS

IF UPDATE (terminado)

update evt_oficha set state = 1 from inserted, oficha where
oficha.ficha_order = inserted.ficha_order and oficha.ficha_date =
inserted.ficha_date and evt_oficha.state = 0 and oficha.terminado = 1
update evt_oficha set state = 3 from inserted, oficha where
oficha.ficha_order = inserted.ficha_order and oficha.ficha_date =
inserted.ficha_date and evt_oficha.state = 2 and oficha.terminado = 1
 

Leer las respuestas

#1 Alejandro Mesa
20/05/2005 - 17:17 | Informe spam
Como se relacionan las tablas [evt_oficha] y [oficha]?

Fijate que en las dos sentencias UPDATE, no estas relacionando estas tablas,
por lo que la sentencia esta actualizando todas las filas en [evt_oficha] que
cumplen el filtro si las tablas [oficha] e [inserted] tienen alguna fila en
comun. Las sentecnias deberian ser algo asi como:

update
evt_oficha
set
state = 1
where
exists(
select
*
from
oficha as o
inner join
inserted as i
on o.ficha_order = i.ficha_order
and o.ficha_date = i.ficha_date
where
o.terminado = 1
and o.? = evt_oficha.?
)
and state = 0

update
evt_oficha
set
state = 1
where
exists(
select
*
from
oficha as o
inner join
inserted as i
on o.ficha_order = i.ficha_order
and o.ficha_date = i.ficha_date
where
o.terminado = 1
and o.? = evt_oficha.?
)
and state = 2

Fijate en los signos de interrogacion. Ahi debes poner las columnas que
relacionan ambas tablas.

En cuanto a que este trigger se dispara cuando haces un insert en la tabla
[hl7_oficha], no debe ser, al menos que este se este activando por algun otro
trigger que tengas cuando insertas y desde el cual actualizas.


AMB

"Juan F Botero" wrote:

saludos

tengo un problema con este trigger. se supone que cuando actualice el valor
de terminado de la tabla oficha, el trigger deberia cambiar el estado de la
tabla oficha_evt_oficha.
pero al instalarlo, e insertar un nuevo registro, el trigger se dispara.
pero se supone que no se debe disparar para in insert sino para un update y
solo del campo terminado.

alguna sugerencia?

Otra pregunta seria si se puede tener dos sentencia sql dentro del mismo
trigger como esta este?

Gracias por sus comentarios


CREATE TRIGGER [hl7_oficha] ON [oficha]
FOR UPDATE
AS

IF UPDATE (terminado)

update evt_oficha set state = 1 from inserted, oficha where
oficha.ficha_order = inserted.ficha_order and oficha.ficha_date =
inserted.ficha_date and evt_oficha.state = 0 and oficha.terminado = 1
update evt_oficha set state = 3 from inserted, oficha where
oficha.ficha_order = inserted.ficha_order and oficha.ficha_date =
inserted.ficha_date and evt_oficha.state = 2 and oficha.terminado = 1



Preguntas similares