Triggers

29/05/2006 - 15:11 por María Eugenia Ryan | Informe spam
Hola a todos, estoy sufriendo con un triggers, lo que necesito es que cuando
el ususario inserte o modifique un campo en la tabla, automáticamente asigne
al campo HORAS_EXTRAS.Cant_Hs_Extras la diferencia de HORAS_EXTRAS.Horas2 y
HORAS_EXTRAS.Horas1.

Pero no puedo hacerlo y no encuentro buena información acerca de los
triggers, si me pueden dar alguna ayuda y además les agradecería que me
indiquen dónde puedo buscar información y ejemplos, gracias.
Este es el código (seguro me falta conocimiento conceptual):
ALTER TRIGGER HORAS_EXTRAS_Trigger1

ON dbo.HORAS_EXTRAS

FOR INSERT, UPDATE

AS

Update HORAS_EXTRAS set HORAS_EXTRAS.Cant_Hs_Extras = HORAS_EXTRAS.Horas2 -
HORAS_EXTRAS.Horas1








María Eugenia Ryan

Preguntas similare

Leer las respuestas

#6 Jorge Gonzalez
29/05/2006 - 20:18 | Informe spam
Estimada María Eugenia

Creo que un trigger así te vendría bien:

ALTER TRIGGER HORAS_EXTRAS_Trigger1 ON dbo.HORAS_EXTRAS
FOR INSERT, UPDATE
AS
IF Update (Horas2) or Update (Horas1)
Begin
Update HORAS_EXTRAS
set HORAS_EXTRAS.Cant_Hs_Extras = HORAS_EXTRAS.Horas2 -
HORAS_EXTRAS.Horas1
from HORAS_EXTRAS inner join INSERTED on
HORAS_EXTRAS.LLAVE_PRIMARIA INSERTED.LLAVE_PRIMARIA
End

Varios comentarios al respecto
1. Recuerda que las tabla inserted y deleted tienen una estructura identica
a la que has asociado el trigger. En una instrucción Insert, solo existe la
versión INSERTED. En una instrucción Delete sólo existe la versión DELETED y
en una instrucción UPDATE existen ambas tablas, Inserted tiene los datos
nuevos y Deleted tiene los datos viejos (antes del update)
2. El uso del operador Update(columna) hace que el UPDATE se dispare sólo si
las columnas actualizadas son Horas2 u Horas1.
3. En la instrucción que te he mandado debes sustituir LLAVE_PRIMARIA por el
o los campos que sean llave primaria de tu tabla.
4. Un trigger no es la mejor ni más eficiente de las soluciones, sería
preferible que el código que dispara el update también haga update de la
columna HORAS_EXTRA, Otra alternativa que planteaba BitOne es que uses una
columna calculada con una formula asociada. Esto te daría una gran
flexibilidad y no requerirías del trigger.

Los trigger son una solución poderosa, pero también peligrosa porque pueden
dañar el desempeño de tus aplicaciones si no los usas con cautela. Un
trigger es parte de la transacción que lo inició así que si usas ROLLBACK
puedes causar un desastre.

Ten cuidado con su uso y sobre todo lée todo lo que puedas en los libros en
línea que son una documentación excelente al respecto

saludos
Jorge González


"María Eugenia Ryan" escribió en el mensaje
news:
Hola a todos, estoy sufriendo con un triggers, lo que necesito es que
cuando el ususario inserte o modifique un campo en la tabla,
automáticamente asigne al campo HORAS_EXTRAS.Cant_Hs_Extras la diferencia
de HORAS_EXTRAS.Horas2 y HORAS_EXTRAS.Horas1.

Pero no puedo hacerlo y no encuentro buena información acerca de los
triggers, si me pueden dar alguna ayuda y además les agradecería que me
indiquen dónde puedo buscar información y ejemplos, gracias.
Este es el código (seguro me falta conocimiento conceptual):
ALTER TRIGGER HORAS_EXTRAS_Trigger1

ON dbo.HORAS_EXTRAS

FOR INSERT, UPDATE

AS

Update HORAS_EXTRAS set HORAS_EXTRAS.Cant_Hs_Extras =
HORAS_EXTRAS.Horas2 - HORAS_EXTRAS.Horas1








María Eugenia Ryan

Respuesta Responder a este mensaje
#7 MAXI [MVP SQL]
30/05/2006 - 02:20 | Informe spam
Hola, una puntualizacion, no son variables temporales sino tablas virtuales
que tienen la misma estructura que la tabla del trigger


Microsoft MVP SQL Server
Orador para Culminis
Miembro de SQLgurus (www.sqlgurus.org)
"Eduardo Castro" escribió en el mensaje
news:%
En los triggers tienes que hacer referencia a una variable "temporal" que
se llama Inserted y Updated, estos contiene los registros que fueron
actualizados o insertados, en tu caso modifica tu sql para que trabaje
sobre esas tablas "inserted y updated"

Eduardo Castro
Microsoft MVP
MCSE 2003+Security, MCDBA, MCSD .NET, CCNA

"María Eugenia Ryan" wrote in message
news:
Hola a todos, estoy sufriendo con un triggers, lo que necesito es que
cuando el ususario inserte o modifique un campo en la tabla,
automáticamente asigne al campo HORAS_EXTRAS.Cant_Hs_Extras la diferencia
de HORAS_EXTRAS.Horas2 y HORAS_EXTRAS.Horas1.

Pero no puedo hacerlo y no encuentro buena información acerca de los
triggers, si me pueden dar alguna ayuda y además les agradecería que me
indiquen dónde puedo buscar información y ejemplos, gracias.
Este es el código (seguro me falta conocimiento conceptual):
ALTER TRIGGER HORAS_EXTRAS_Trigger1

ON dbo.HORAS_EXTRAS

FOR INSERT, UPDATE

AS

Update HORAS_EXTRAS set HORAS_EXTRAS.Cant_Hs_Extras =
HORAS_EXTRAS.Horas2 - HORAS_EXTRAS.Horas1








María Eugenia Ryan





Respuesta Responder a este mensaje
#8 MAXI [MVP SQL]
30/05/2006 - 02:21 | Informe spam
Hola, te recomiendo que analices el uso de vistas indexadas en lugar de
triggers para lo que estas buscando hacer.


Microsoft MVP SQL Server
Orador para Culminis
Miembro de SQLgurus (www.sqlgurus.org)
"María Eugenia Ryan" escribió en el mensaje
news:
Hola a todos, estoy sufriendo con un triggers, lo que necesito es que
cuando el ususario inserte o modifique un campo en la tabla,
automáticamente asigne al campo HORAS_EXTRAS.Cant_Hs_Extras la diferencia
de HORAS_EXTRAS.Horas2 y HORAS_EXTRAS.Horas1.

Pero no puedo hacerlo y no encuentro buena información acerca de los
triggers, si me pueden dar alguna ayuda y además les agradecería que me
indiquen dónde puedo buscar información y ejemplos, gracias.
Este es el código (seguro me falta conocimiento conceptual):
ALTER TRIGGER HORAS_EXTRAS_Trigger1

ON dbo.HORAS_EXTRAS

FOR INSERT, UPDATE

AS

Update HORAS_EXTRAS set HORAS_EXTRAS.Cant_Hs_Extras =
HORAS_EXTRAS.Horas2 - HORAS_EXTRAS.Horas1








María Eugenia Ryan

Respuesta Responder a este mensaje
#9 qwalgrande
30/05/2006 - 07:12 | Informe spam
Hola.

Si no te he entendido mal, los cambios sólamente afectarían a una tabla.
¿Por qué no pruebas con un campo calculado y te olvidas del trigger?

Alberto López Grande (qwalgrande)


"María Eugenia Ryan" escribió en el mensaje
news:
Hola a todos, estoy sufriendo con un triggers, lo que necesito es que
cuando el ususario inserte o modifique un campo en la tabla,
automáticamente asigne al campo HORAS_EXTRAS.Cant_Hs_Extras la diferencia
de HORAS_EXTRAS.Horas2 y HORAS_EXTRAS.Horas1.

Pero no puedo hacerlo y no encuentro buena información acerca de los
triggers, si me pueden dar alguna ayuda y además les agradecería que me
indiquen dónde puedo buscar información y ejemplos, gracias.
Este es el código (seguro me falta conocimiento conceptual):
ALTER TRIGGER HORAS_EXTRAS_Trigger1

ON dbo.HORAS_EXTRAS

FOR INSERT, UPDATE

AS

Update HORAS_EXTRAS set HORAS_EXTRAS.Cant_Hs_Extras =
HORAS_EXTRAS.Horas2 - HORAS_EXTRAS.Horas1








María Eugenia Ryan

Respuesta Responder a este mensaje
#10 María Eugenia Ryan
30/05/2006 - 13:57 | Informe spam
¿Una columna calculada dentro de la misma tabla?, ¿se puede?



"Jorge Gonzalez" escribió en el mensaje
news:
Estimada María Eugenia

Creo que un trigger así te vendría bien:

ALTER TRIGGER HORAS_EXTRAS_Trigger1 ON dbo.HORAS_EXTRAS
FOR INSERT, UPDATE
AS
IF Update (Horas2) or Update (Horas1)
Begin
Update HORAS_EXTRAS
set HORAS_EXTRAS.Cant_Hs_Extras = HORAS_EXTRAS.Horas2 -
HORAS_EXTRAS.Horas1
from HORAS_EXTRAS inner join INSERTED on
HORAS_EXTRAS.LLAVE_PRIMARIA INSERTED.LLAVE_PRIMARIA
End

Varios comentarios al respecto
1. Recuerda que las tabla inserted y deleted tienen una estructura
identica a la que has asociado el trigger. En una instrucción Insert, solo
existe la versión INSERTED. En una instrucción Delete sólo existe la
versión DELETED y en una instrucción UPDATE existen ambas tablas, Inserted
tiene los datos nuevos y Deleted tiene los datos viejos (antes del update)
2. El uso del operador Update(columna) hace que el UPDATE se dispare sólo
si las columnas actualizadas son Horas2 u Horas1.
3. En la instrucción que te he mandado debes sustituir LLAVE_PRIMARIA por
el o los campos que sean llave primaria de tu tabla.
4. Un trigger no es la mejor ni más eficiente de las soluciones, sería
preferible que el código que dispara el update también haga update de la
columna HORAS_EXTRA, Otra alternativa que planteaba BitOne es que uses una
columna calculada con una formula asociada. Esto te daría una gran
flexibilidad y no requerirías del trigger.

Los trigger son una solución poderosa, pero también peligrosa porque
pueden dañar el desempeño de tus aplicaciones si no los usas con cautela.
Un trigger es parte de la transacción que lo inició así que si usas
ROLLBACK puedes causar un desastre.

Ten cuidado con su uso y sobre todo lée todo lo que puedas en los libros
en línea que son una documentación excelente al respecto

saludos
Jorge González


"María Eugenia Ryan" escribió en el mensaje
news:
Hola a todos, estoy sufriendo con un triggers, lo que necesito es que
cuando el ususario inserte o modifique un campo en la tabla,
automáticamente asigne al campo HORAS_EXTRAS.Cant_Hs_Extras la diferencia
de HORAS_EXTRAS.Horas2 y HORAS_EXTRAS.Horas1.

Pero no puedo hacerlo y no encuentro buena información acerca de los
triggers, si me pueden dar alguna ayuda y además les agradecería que me
indiquen dónde puedo buscar información y ejemplos, gracias.
Este es el código (seguro me falta conocimiento conceptual):
ALTER TRIGGER HORAS_EXTRAS_Trigger1

ON dbo.HORAS_EXTRAS

FOR INSERT, UPDATE

AS

Update HORAS_EXTRAS set HORAS_EXTRAS.Cant_Hs_Extras =
HORAS_EXTRAS.Horas2 - HORAS_EXTRAS.Horas1








María Eugenia Ryan





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