Update que parece que guarda antes de lanzar el Trigger

02/12/2004 - 15:42 por BigSus | Informe spam
Hasta hoy creía que los triggers primero se desencadenaban y luego se
actualizaba la base de datos. Pero me ocurre lo siguiente.

TABLAS
Tengo una tabla X con un campo llamado Estado
Tengo una tabla Y de datos relacionados de la tabla X con un campo
llamado FechaLimiteUso

TRIGGERS
-En la tabla Y tengo un trigger de update que no me permite modificar
ningún registro cuyo registro X tenga Estado = CERRADO
-En la tabla X tengo un trigger de update que cuando se cambie el valor
del campo Estado a CERRADO me modifique todos los registros relacionados
de la tabla Y para ponerles FechaLimiteUso igual a la actual

Los triggers son normales, nada de After Update.

PROBLEMA
Al hacer el update de la tabla X para poner Estado = CERRADO, se ejecuta
el trigger que modifica los registros de la tabla Relacionada Y. Al
hacerlo el trigger de la tabla Y, comprueba que el registro de la tabla
X no este CERRADO y lo encuentra cerrado(PERO SI TODAVIA NO HA TERMINADO
DE EJECUTARSE EL TRIGGER Y SE SUPONE QUE LOS TRIGGERS SE EJECUTAN ANTES
DE GUARDAR ¿PORQUE LO ENCUENTRA YA 'CERRADO'?), ejecuta el Raise error y
se deshace la transacción.

¿Esto tiene sentido?
No se como solucionar el problema, ¿Se os ocurre algo?

Un saludo

Preguntas similare

Leer las respuestas

#1 Javier Loria
02/12/2004 - 16:12 | Informe spam
Hola:
A excepcion de los Triggers Instead Of, estos se disparan siempre
despues de la accion de la BD.

Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"BigSus" wrote in message
news:u$
Hasta hoy creía que los triggers primero se desencadenaban y luego se
actualizaba la base de datos. Pero me ocurre lo siguiente.

TABLAS
Tengo una tabla X con un campo llamado Estado
Tengo una tabla Y de datos relacionados de la tabla X con un campo
llamado FechaLimiteUso

TRIGGERS
-En la tabla Y tengo un trigger de update que no me permite modificar
ningún registro cuyo registro X tenga Estado = CERRADO
-En la tabla X tengo un trigger de update que cuando se cambie el valor
del campo Estado a CERRADO me modifique todos los registros relacionados
de la tabla Y para ponerles FechaLimiteUso igual a la actual

Los triggers son normales, nada de After Update.

PROBLEMA
Al hacer el update de la tabla X para poner Estado = CERRADO, se ejecuta
el trigger que modifica los registros de la tabla Relacionada Y. Al
hacerlo el trigger de la tabla Y, comprueba que el registro de la tabla
X no este CERRADO y lo encuentra cerrado(PERO SI TODAVIA NO HA TERMINADO
DE EJECUTARSE EL TRIGGER Y SE SUPONE QUE LOS TRIGGERS SE EJECUTAN ANTES
DE GUARDAR ¿PORQUE LO ENCUENTRA YA 'CERRADO'?), ejecuta el Raise error y
se deshace la transacción.

¿Esto tiene sentido?
No se como solucionar el problema, ¿Se os ocurre algo?

Un saludo

Respuesta Responder a este mensaje
#2 ulises
02/12/2004 - 17:01 | Informe spam
Tal vez te estés confundiendo por la forma como se manejan
los triggers en otros manejadores de BBDD, en SQL Server
2000 tienes dos tipos de triggers: los INSTEAD OF
(mayormente utilizado para permitir a una vista actualizar
múltiples tablas) y los AFTER (que tú le llamas normales),
que se realizan luego de efectuar la operación, si deseas
comparar datos anteriores a la actualización siempre puedes
hacerlo usando las tablas virtuales deleted e inserted que
contienen la información de la fila antes y despues de la
actualización respectivamente. Otro tema que me parece
intuir de tu mensaje es que asumes que el trigger se invoca
por cada fila actualizada, lo que no es correcto, se invoca
una sola vez por todas las actualizaciones que la sentencia
UPDATE haya realizado.

Saludos,
Ulises

Hasta hoy creía que los triggers primero se desencadenaban


y luego se
actualizaba la base de datos. Pero me ocurre lo siguiente.

TABLAS
Tengo una tabla X con un campo llamado Estado
Tengo una tabla Y de datos relacionados de la tabla X con


un campo
llamado FechaLimiteUso

TRIGGERS
-En la tabla Y tengo un trigger de update que no me


permite modificar
ningún registro cuyo registro X tenga Estado = CERRADO
-En la tabla X tengo un trigger de update que cuando se


cambie el valor
del campo Estado a CERRADO me modifique todos los


registros relacionados
de la tabla Y para ponerles FechaLimiteUso igual a la actual

Los triggers son normales, nada de After Update.

PROBLEMA
Al hacer el update de la tabla X para poner Estado CERRADO, se ejecuta
el trigger que modifica los registros de la tabla


Relacionada Y. Al
hacerlo el trigger de la tabla Y, comprueba que el


registro de la tabla
X no este CERRADO y lo encuentra cerrado(PERO SI TODAVIA


NO HA TERMINADO
DE EJECUTARSE EL TRIGGER Y SE SUPONE QUE LOS TRIGGERS SE


EJECUTAN ANTES
DE GUARDAR ¿PORQUE LO ENCUENTRA YA 'CERRADO'?), ejecuta el


Raise error y
se deshace la transacción.

¿Esto tiene sentido?
No se como solucionar el problema, ¿Se os ocurre algo?

Un saludo

.

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