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

#16 Alejandro Mesa
05/04/2005 - 19:29 | Informe spam
Berta,

Ya te conteste en el otro mensaje.

Veamos en palabras lo que hace el trigger. Si alguna obra es referenciada,
tanto en la tabla inserted como en la tabla deleted, entonces chequea si
existe algun contrato tipo = 5 con stat = 1 y actualiza la columna
[obras].[stat] = 1 si no existe dicho contrato entonces [obras].[stat] = 0.
Comparto el comentario de Ricardo, muy ingenioso lo que has hecho al unir las
tablas inserted y deleted, tambien reconosco la solucion la solucion posteada
por el (Ricardo). Solo quedaria hacer la actualizacion cuando se cambia la
columna [obra] en la tabla [contratos] y/o la columna [stat], pero aun asi la
idea sigue siendo genial, como dice el dicho "lo cortez no quita lo valiente".


AMB

"Berta Gomez" wrote:

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:
> Maxi,
>
> Estoy de acuerdo contigo, en caso de actualizacion ambas tablas tendran
> diferentes filas y el resultado sera igual que usar UNION ALL, y por lo
tanto
> se actualizara dos veces la misma fila en la tabla [obras], incluso si la
> columna [stat] no cambio en la tabla [contratos].
>
>
> AMB
>
> "Maxi" wrote:
>
> > Pero a ver, en deleted estaran los registros a borrar y en inserted a
> > insertar, que pasa cuando hay un UPDATE? se llenan ambas tablas
> >
> >
> > Salu2
> > Maxi
> >
> >
> > "Berta Gomez" escribió en el mensaje
> > news:
> > >> Hola, lo que no entiendo es porque haces un UNION con la Inserted -
> > > Deleted?
> > >> ahi puedes tener registros repetidos :(
> > >
> > > Pensaba que no se repetian si no ponia UNION ALL. No es asi ?
> > >
> > >
> > >
> >
> >
> >



Respuesta Responder a este mensaje
#17 Ricardo Passians
05/04/2005 - 22:16 | Informe spam


idea sigue siendo genial, como dice el dicho "lo cortez no quita lo


valiente".




Es un buen gesto que te enaltece.


Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida