Ayuda con un trigger please

05/04/2005 - 15:39 por Berta Gomez | Informe spam
Un tabla OBRAS tiene un estatus (0-activa 1-rescindida). Ese campo debo
actualizarlo cuando se registra un contrato de rescicion en la tabla
CONTRATOS, en este caso cuando el campo CONTRATOS.tipo = 5 (flag de
rescision). El asunto es que CONTRATOS tiene otro campo estatus (0-activo
1-inactivo). Si el contrato se inactiva aun su tipo sea 5 (rescision), la
obra debe quedar como que no esta rescindida. El contrato posee un campo
Obra para referenciar la obra a la cual se refiere.

He hecho este trigger despues de muuuuucho pensar, para (insert, update y
delete ) en la tabla CONTRATOS y me gustaria me dieran una opinion pues no
estoy muy clara porque me funciona para rescindir la obra pero si se marca
como inactivo el contrato de rescision no me funciona.

for insert,update, delete
..
..
UPDATE OBRAS
SET OBRAS.STAT=1
from OBRAS inner join (select obra from INSERTED union select obra from
DELETED) contratosmodificados on OBRAS.obra=contratosmodificados.obra
WHERE EXISTS( select contrato from CONTRATOS where CONTRATOS.obra=OBRAS.obra
and CONTRATOS.tipo=3 and CONTRATOS.stat=1)

Preguntas similare

Leer las respuestas

#11 Berta Gomez
05/04/2005 - 18:22 | Informe spam
Ok pero pienso que como tengo SELECT OBRA (solo la columna obra) en la
union, si esta no ha cambiado en el update pues solamente aparecera una sola
vez en el conjunto resultante porque no tengo UNION ALL. No estoy
totalmente segura pero me imagino que es asi porque inserted y deleted el
trigger las trata igual que a cualesquiera otras tablas.


Gracias

Berta





"Maxi" wrote in message
news:
Mostrar la cita
#12 Berta Gomez
05/04/2005 - 18:28 | Informe spam
Como te dije en otro mensaje, pienso que no se repiten porque el select de
la union solo tiene la columna OBRA. Pero de todos modos me intriga
probarlo. Como podria dentro del trigger saber si esta trabajando
correctamente en cuanto a que no se repite ?


"Alejandro Mesa" wrote in message
news:
Mostrar la cita
tanto
Mostrar la cita
#13 Alejandro Mesa
05/04/2005 - 18:41 | Informe spam
Berta,

Mostrar la cita
Esa es la idea, aprender y ayudar. No tomes a mal ningun comentario por
parte de quienes participamos en el grupo.

Mostrar la cita
Eso no es suficiente, IF UPDATE(stat) solo dice si la columna [stat] formo
parte de la lista de columnas referenciadas en la sentencia update que
disparo el trigger. Debes comparar los valores de la columna [stat] en ambas
tablas (inserted y deleted), recurda tener en cuenta los valores NULL si es
que eston son permitidas en esta columna pues NULL != 1 es NULL y no se
detectara.

Mostrar la cita
Tienes toda la razon. No me fije que en el select estava solo una columna,
asi que la seleccion no dara filas duplicadas.

(select obra from inserted union select obra from deleted)

Opss!!


AMB

"Berta Gomez" wrote:

Mostrar la cita
#14 Ricardo Passians
05/04/2005 - 19:00 | Informe spam
Hola,

En cuanto a la union solo devolvera mas de un registro cuando efectivamente
la columna OBRA ha sido actualizada. En caso contrario, tendria que haber un
Union all para que se repitan. Me luce por cierto una idea muy ingeniosa
de Berta hacer esa union.

Sobre lo del campo stat de la tabla contratos pienso que depende del costo
que tenga estarlo actualizando cada vez. Puede que eso no sea muy costoso,
habria que ver el caso particular y la frecuencia. Me imagino ademas que
tambien podria cambiar la columna tipo en cuyo caso deberia actualizarse
igual, haya o no cambiado el campo stat. Por eso habria que ver.

De todas maneras yo tambien considero que es preferible tenerlo separado en
varios trigger para insert, update, delete pues asi todo es mas sencillo de
comprender y mantener. Lo puse asi, porque Berta ya lo tenia todo en un
solo trigger.


Saludos


"Alejandro Mesa" wrote in message
news:
Mostrar la cita
la
Mostrar la cita
alguna
Mostrar la cita
veces
Mostrar la cita
que se
Mostrar la cita
un
Mostrar la cita
fue un
Mostrar la cita
from
Mostrar la cita
campo
Mostrar la cita
(rescision),
Mostrar la cita
campo
Mostrar la cita
update
Mostrar la cita
pues
Mostrar la cita
from
Mostrar la cita
OBRAS.obra=contratosmodificados.obra
Mostrar la cita
#15 Ricardo Passians
05/04/2005 - 19:03 | Informe spam
Estas en lo cierto, como diria chaparron :)

Sobre como probarlo, puede haber otras maneras pero una sencilla es poner
temporalmente un contador de actualizaciones en la tabla obras y poner un
trigger de update a esa tabla que le incremente en uno ese contador.
Cuando hayas hecho la prueba puedes borrar tando el contador como el trigger
for update de la tabla obras.

Saludos.


"Berta Gomez" wrote in message
news:
Mostrar la cita
message
Mostrar la cita
la
Mostrar la cita
Ads by Google
Search Busqueda sugerida