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

#6 Berta Gomez
05/04/2005 - 17:27 | Informe spam
Aclaro que puse la union porque puede darse que actualicen un contrato y le
cambien la obra y entonces deleted.obra puede ser distinto de inserted.obra.


"Berta Gomez" wrote in message
news:
Mostrar la cita
#7 Alejandro Mesa
05/04/2005 - 17:47 | Informe spam
Berta,

Un comentario. La sentencia posteada, asi como la solucion, actualizaran la
columna [stat] de la tabla [obras] aunque la columna [stat] de la tabla
[contratos] no haya cambiado, ademas la UNION traera dos registros si alguna
columna cambio y por tanto actualizaras una fila en la tabla obras dos veces
para un mismo contrato. Crees que eso es practico?


AMB


"Berta Gomez" wrote:

Mostrar la cita
#8 Maxi
05/04/2005 - 17:54 | Informe spam
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:
Mostrar la cita
#9 Alejandro Mesa
05/04/2005 - 18:05 | Informe spam
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:

Mostrar la cita
#10 Berta Gomez
05/04/2005 - 18:15 | Informe spam
Hola Alejandro,

Bueno solo dije que lo estaba probando y funciona :). Ya que se pueda
optimizar es otra cosa. La idea es aprender.

A ver, para detectar si la columna stat de la tabla contratos ha cambiado
podria usar un IF UPDATE(stat). Con eso seria suficiente , no ?

Lo de la UNION me imagino (no lo he probado) que como tiene explicitamente
el campo OBRA en cada select y no tiene la clausula ALL, solo me devolvera
un solo registro si la obra no ha cambiado (caso de un update). Ahora bien,
si la columna OBRA ha cambiado pues es correcto que me devuelva los dos
registros (la vieja obra y la nueva) debido a que ambos deben ser
actualizados. Si no es ese el comportamiento favor corregirme.


Saludos y gracias por la ayuda que todos me dan

Berta


"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
Ads by Google
Search Busqueda sugerida