Duda con triggers

06/11/2003 - 19:29 por Antonio Liberal | Informe spam
Hola buenas.

Tengo una duda. ¿Se puede desencadenar un disparador ANTES de que los
cambios sean efectivos en una tabla?.
Me explico,
Tengo dos tablas: cabecera de albarán (con fecha) y líneas. En la cabecera
tengo un disparador (con FOR UPDATE) que lanza un UPDATE de la tabla de
líneas. En las líneas tengo otro disparador (con FOR UPDATE) que hace
referencia a la cabecera (obtengo el campo fecha y con la cantidad que pone
en líneas inserto en una estadística). Me interesaría que la fecha que
recoge el disparador de líneas fuera la fecha de la cabecera ANTES de la
modificación. Es decir, si cambio el campo de fecha de 01/01/2003 a
02/01/2003, que en el disparador de líneas obtenga el valor 01/01/2003. Al
final lo que quiero hacer es descontar de las estadísticas de la fecha
01/01/2003 y contar de las estadísticas de la fecha 02/01/2003.

Espero que me hayáis entendido.

Saludos.

Preguntas similare

Leer las respuestas

#1 Fernando G. Guerrero
06/11/2003 - 20:46 | Informe spam
En SQL Server 2000 si es posible: utiliza triggers INSTEAD OF INSERT, o
INSTEAD OF DELETE o INSTEAD OF UPDATE.

Puedes encontrar una presentación que hice sobre este tema hace algún tiempo
(está en inglés) en:

http://www.solidqualitylearning.com...rnando.htm


Fernando G. Guerrero
SQL Server MVP
CEO & Principal Mentor
Solid Quality Learning
www.solidqualitylearning.com

"Comparte lo que sabes, aprende lo que no sepas"

"Antonio Liberal" wrote in
message news:e$
Hola buenas.

Tengo una duda. ¿Se puede desencadenar un disparador ANTES de que los
cambios sean efectivos en una tabla?.
Me explico,
Tengo dos tablas: cabecera de albarán (con fecha) y líneas. En la cabecera
tengo un disparador (con FOR UPDATE) que lanza un UPDATE de la tabla de
líneas. En las líneas tengo otro disparador (con FOR UPDATE) que hace
referencia a la cabecera (obtengo el campo fecha y con la cantidad que


pone
en líneas inserto en una estadística). Me interesaría que la fecha que
recoge el disparador de líneas fuera la fecha de la cabecera ANTES de la
modificación. Es decir, si cambio el campo de fecha de 01/01/2003 a
02/01/2003, que en el disparador de líneas obtenga el valor 01/01/2003. Al
final lo que quiero hacer es descontar de las estadísticas de la fecha
01/01/2003 y contar de las estadísticas de la fecha 02/01/2003.

Espero que me hayáis entendido.

Saludos.


Respuesta Responder a este mensaje
#2 fabian
06/11/2003 - 21:09 | Informe spam
Si comprendí lo que intentás hacer, tendrías el valor
antiguo en la tabla deleted (en realidad todo el registro)
y el nuevo valor en la tabla inserted que, si fuera
necesario podrías guardar en variables o en una tabla
temporal, para luego utilizarlos en los cálculos que
necesitás realizar.
Salu2.

Hola buenas.

Tengo una duda. ¿Se puede desencadenar un disparador


ANTES de que los
cambios sean efectivos en una tabla?.
Me explico,
Tengo dos tablas: cabecera de albarán (con fecha) y


líneas. En la cabecera
tengo un disparador (con FOR UPDATE) que lanza un UPDATE


de la tabla de
líneas. En las líneas tengo otro disparador (con FOR


UPDATE) que hace
referencia a la cabecera (obtengo el campo fecha y con la


cantidad que pone
en líneas inserto en una estadística). Me interesaría que


la fecha que
recoge el disparador de líneas fuera la fecha de la


cabecera ANTES de la
modificación. Es decir, si cambio el campo de fecha de


01/01/2003 a
02/01/2003, que en el disparador de líneas obtenga el


valor 01/01/2003. Al
final lo que quiero hacer es descontar de las


estadísticas de la fecha
01/01/2003 y contar de las estadísticas de la fecha


02/01/2003.

Espero que me hayáis entendido.

Saludos.


.

Respuesta Responder a este mensaje
#3 Antonio Liberal
07/11/2003 - 08:57 | Informe spam
Ante todo, gracias por responder.
Voy a leermelo.
Sólo una cosa antes. Por lo que tenía entendido este tipo de triggers se
ejecutan en lugar de lo que se esté haciendo, pero lo que yo quiero hacer es
leer la situación antes de que ocurran los cambios (esto lo hacen los
triggers INSTEAD OF) y que se produzcan efectivamente. ¿Cómo puedo hacer
esto?

Un saludo.

"Fernando G. Guerrero" escribió en el mensaje
news:uu8$
En SQL Server 2000 si es posible: utiliza triggers INSTEAD OF INSERT, o
INSTEAD OF DELETE o INSTEAD OF UPDATE.

Puedes encontrar una presentación que hice sobre este tema hace algún


tiempo
(está en inglés) en:




http://www.solidqualitylearning.com...rnando.htm


Fernando G. Guerrero
SQL Server MVP
CEO & Principal Mentor
Solid Quality Learning
www.solidqualitylearning.com

"Comparte lo que sabes, aprende lo que no sepas"

"Antonio Liberal" wrote in
message news:e$
> Hola buenas.
>
> Tengo una duda. ¿Se puede desencadenar un disparador ANTES de que los
> cambios sean efectivos en una tabla?.
> Me explico,
> Tengo dos tablas: cabecera de albarán (con fecha) y líneas. En la


cabecera
> tengo un disparador (con FOR UPDATE) que lanza un UPDATE de la tabla de
> líneas. En las líneas tengo otro disparador (con FOR UPDATE) que hace
> referencia a la cabecera (obtengo el campo fecha y con la cantidad que
pone
> en líneas inserto en una estadística). Me interesaría que la fecha que
> recoge el disparador de líneas fuera la fecha de la cabecera ANTES de la
> modificación. Es decir, si cambio el campo de fecha de 01/01/2003 a
> 02/01/2003, que en el disparador de líneas obtenga el valor 01/01/2003.


Al
> final lo que quiero hacer es descontar de las estadísticas de la fecha
> 01/01/2003 y contar de las estadísticas de la fecha 02/01/2003.
>
> Espero que me hayáis entendido.
>
> Saludos.
>
>


Respuesta Responder a este mensaje
#4 Antonio Liberal
07/11/2003 - 09:00 | Informe spam
Gracias por responder.

Todo esto viene por ahorrarme código (en realidad por ahorrarme repetición
de código). Podía poner el código que se ejecuta en el disparador de líneas
en la cabecera y con eso lo tengo solucionado.

Un saludo.

"fabian" escribió en el mensaje
news:011501c3a4a1$d2a1b9d0$
Si comprendí lo que intentás hacer, tendrías el valor
antiguo en la tabla deleted (en realidad todo el registro)
y el nuevo valor en la tabla inserted que, si fuera
necesario podrías guardar en variables o en una tabla
temporal, para luego utilizarlos en los cálculos que
necesitás realizar.
Salu2.

Hola buenas.

Tengo una duda. ¿Se puede desencadenar un disparador


ANTES de que los
cambios sean efectivos en una tabla?.
Me explico,
Tengo dos tablas: cabecera de albarán (con fecha) y


líneas. En la cabecera
tengo un disparador (con FOR UPDATE) que lanza un UPDATE


de la tabla de
líneas. En las líneas tengo otro disparador (con FOR


UPDATE) que hace
referencia a la cabecera (obtengo el campo fecha y con la


cantidad que pone
en líneas inserto en una estadística). Me interesaría que


la fecha que
recoge el disparador de líneas fuera la fecha de la


cabecera ANTES de la
modificación. Es decir, si cambio el campo de fecha de


01/01/2003 a
02/01/2003, que en el disparador de líneas obtenga el


valor 01/01/2003. Al
final lo que quiero hacer es descontar de las


estadísticas de la fecha
01/01/2003 y contar de las estadísticas de la fecha


02/01/2003.

Espero que me hayáis entendido.

Saludos.


.

Respuesta Responder a este mensaje
#5 Fernando G. Guerrero
07/11/2003 - 10:25 | Informe spam
Desde dentro de un INSTEAD OF trigger puedes ver qué modificación se ha
intentado ejecutar, aunque nada ha cambiado aún en las tablas, y puedes
decidir qué hacer con ello. Si no ejecutas nada dentro del trigger, SQL
Server no ejecutará nada de lo que se había pedido, as;i que te toca a tí
enviar de nuevo la instrucción que desencadenó el trigger.

Fernando G. Guerrero
SQL Server MVP
CEO & Principal Mentor
Solid Quality Learning
www.solidqualitylearning.com

"Comparte lo que sabes, aprende lo que no sepas"

"Antonio Liberal" wrote in
message news:
Ante todo, gracias por responder.
Voy a leermelo.
Sólo una cosa antes. Por lo que tenía entendido este tipo de triggers se
ejecutan en lugar de lo que se esté haciendo, pero lo que yo quiero hacer


es
leer la situación antes de que ocurran los cambios (esto lo hacen los
triggers INSTEAD OF) y que se produzcan efectivamente. ¿Cómo puedo hacer
esto?

Un saludo.

"Fernando G. Guerrero" escribió en el


mensaje
news:uu8$
> En SQL Server 2000 si es posible: utiliza triggers INSTEAD OF INSERT, o
> INSTEAD OF DELETE o INSTEAD OF UPDATE.
>
> Puedes encontrar una presentación que hice sobre este tema hace algún
tiempo
> (está en inglés) en:
>
>



http://www.solidqualitylearning.com...rnando.htm
>
>
> Fernando G. Guerrero
> SQL Server MVP
> CEO & Principal Mentor
> Solid Quality Learning
> www.solidqualitylearning.com
>
> "Comparte lo que sabes, aprende lo que no sepas"
>
> "Antonio Liberal" wrote


in
> message news:e$
> > Hola buenas.
> >
> > Tengo una duda. ¿Se puede desencadenar un disparador ANTES de que los
> > cambios sean efectivos en una tabla?.
> > Me explico,
> > Tengo dos tablas: cabecera de albarán (con fecha) y líneas. En la
cabecera
> > tengo un disparador (con FOR UPDATE) que lanza un UPDATE de la tabla


de
> > líneas. En las líneas tengo otro disparador (con FOR UPDATE) que hace
> > referencia a la cabecera (obtengo el campo fecha y con la cantidad que
> pone
> > en líneas inserto en una estadística). Me interesaría que la fecha que
> > recoge el disparador de líneas fuera la fecha de la cabecera ANTES de


la
> > modificación. Es decir, si cambio el campo de fecha de 01/01/2003 a
> > 02/01/2003, que en el disparador de líneas obtenga el valor


01/01/2003.
Al
> > final lo que quiero hacer es descontar de las estadísticas de la fecha
> > 01/01/2003 y contar de las estadísticas de la fecha 02/01/2003.
> >
> > Espero que me hayáis entendido.
> >
> > Saludos.
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida