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

#6 Antonio Liberal
07/11/2003 - 13:21 | Informe spam
O sea, que si tengo un INSTEAD OF UPDATE, hago lo que quiero y después hago
un update de la tabla "propietaria" del disparador, con las columnas de la
tabla inserted. ¿Es así?

Gracias.

"Fernando G. Guerrero" escribió en el mensaje
news:
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
#7 Fernando G. Guerrero
07/11/2003 - 19:52 | Informe spam
Exactamente, y las tablas virtuales inserted y deleted te indicarán lo que
la consulta original pretendía realizar

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:
O sea, que si tengo un INSTEAD OF UPDATE, hago lo que quiero y después


hago
un update de la tabla "propietaria" del disparador, con las columnas de la
tabla inserted. ¿Es así?

Gracias.

"Fernando G. Guerrero" escribió en el


mensaje
news:
> 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



> 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
#8 Antonio Liberal
10/11/2003 - 08:37 | Informe spam
Muchas gracias, lo intentaré.
Saludos.
"Fernando G. Guerrero" escribió en el mensaje
news:
Exactamente, y las tablas virtuales inserted y deleted te indicarán lo que
la consulta original pretendía realizar

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:
> O sea, que si tengo un INSTEAD OF UPDATE, hago lo que quiero y después
hago
> un update de la tabla "propietaria" del disparador, con las columnas de


la
> tabla inserted. ¿Es así?
>
> Gracias.
>
> "Fernando G. Guerrero" escribió en el
mensaje
> news:
> > 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

> > 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
#9 Eladio Rincon
10/11/2003 - 15:24 | Informe spam
Hola Fernando, :-)

digamos que he encontrado un "hilito" para tirar una pregunta :-)

las tablas virtuales se leen del registro de transacciones, y el registro de
transacciones está agrupado en VLFs (virtual log files); si el log es
secuencial, se supone que todas las escrituras que se realizan en el log se
realizan en VLFs secuenciales; entonces, ¿ por qué es más efectivo tener el
menor número de VLF's posible ? ¿puede ser que las escrituras en el log
estén "fragmentadas" a pesar de ser secuencial el tran. log.?

Gracias Maestro !!!

Eladio Rincón.
SQL Server MVP

http://eladio.europe.webmatrixhosting.net
"Comparte lo que sabes, aprende lo que no sepas", FGG.


"Fernando G. Guerrero" escribió en el mensaje
news:
Exactamente, y las tablas virtuales inserted y deleted te indicarán lo que
la consulta original pretendía realizar

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:
> O sea, que si tengo un INSTEAD OF UPDATE, hago lo que quiero y después
hago
> un update de la tabla "propietaria" del disparador, con las columnas de


la
> tabla inserted. ¿Es así?
>
> Gracias.
>
> "Fernando G. Guerrero" escribió en el
mensaje
> news:
> > 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

> > 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...esFernando
.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.
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


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