Ayuda con triggers

31/10/2009 - 18:56 por kojikabutosv | Informe spam
Buenas tardes, es primera vez que comienzo a trabajr con Triggers y
averiguando logré crear uno, he creado un nuevo campo de tipo fecha que
necesito se actualice con getdate() en cada update pero cuando realizo
un update a la tabla, la actualización se hace sobre todos los
registros, como hago para decirle al trigger que me actualice solamente
el campo que recibió la modificación? o estoy utilizando mal el concepto
de los triggers??


el trigger lo he creado de la siguiente manera:

ALTER TRIGGER [dbo].[TR_ActualizaFecha]
ON [dbo].[Anex_Control]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;

update anex_control set ult_fecha_actualiz = getdate()
END


gracias por su ayuda y comentarios.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
31/10/2009 - 19:43 | Informe spam
Dentro de los triggers "AFTER", tienes acceso a dos tablas virtuales
"deleted" e "inserted" donde puedes ver las filas a las que se actualizo.

Si tu tabla tiene una clave primaria entonces puedes unir tu tabla con la
tabla "inserted" para tener acceso solo a las filas que se actualizaron.

update A
set A.ult_fecha_actualiz = getdate()
from anex_control as A inner join inserted as I on A.pk = I.pk;


AMB


"kojikabutosv" wrote:

Buenas tardes, es primera vez que comienzo a trabajr con Triggers y
averiguando logré crear uno, he creado un nuevo campo de tipo fecha que
necesito se actualice con getdate() en cada update pero cuando realizo
un update a la tabla, la actualización se hace sobre todos los
registros, como hago para decirle al trigger que me actualice solamente
el campo que recibió la modificación? o estoy utilizando mal el concepto
de los triggers??


el trigger lo he creado de la siguiente manera:

ALTER TRIGGER [dbo].[TR_ActualizaFecha]
ON [dbo].[Anex_Control]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;

update anex_control set ult_fecha_actualiz = getdate()
END


gracias por su ayuda y comentarios.
.

Respuesta Responder a este mensaje
#2 Carlos M. Calvelo
31/10/2009 - 21:51 | Informe spam
Hola Alejandro,

On 31 okt, 19:43, Alejandro Mesa
wrote:
Dentro de los triggers "AFTER", tienes acceso a dos tablas virtuales
"deleted" e "inserted" donde puedes ver las filas a las que se actualizo.

Si tu tabla tiene una clave primaria entonces puedes unir tu tabla con la
tabla "inserted" para tener acceso solo a las filas que se actualizaron.

update A
set A.ult_fecha_actualiz = getdate()
from anex_control as A inner join inserted as I on A.pk = I.pk;




Y si se hace un update sobre la columna pk? :-)
(update A set pk=3 where pk=2)

Saludos,
Carlos
Respuesta Responder a este mensaje
#3 Alejandro Mesa
31/10/2009 - 23:19 | Informe spam
Carlos M. Calvelo,

Y si se hace un update sobre la columna pk? :-)
(update A set pk=3 where pk=2)



Entonces estamos jodidos.

En serio, es una buena pregunta. Si tu pk puede cambiar, entonces usa una
llave subrrogada.

AMB


"Carlos M. Calvelo" wrote:

Hola Alejandro,

On 31 okt, 19:43, Alejandro Mesa
wrote:
> Dentro de los triggers "AFTER", tienes acceso a dos tablas virtuales
> "deleted" e "inserted" donde puedes ver las filas a las que se actualizo.
>
> Si tu tabla tiene una clave primaria entonces puedes unir tu tabla con la
> tabla "inserted" para tener acceso solo a las filas que se actualizaron.
>
> update A
> set A.ult_fecha_actualiz = getdate()
> from anex_control as A inner join inserted as I on A.pk = I.pk;
>

Y si se hace un update sobre la columna pk? :-)
(update A set pk=3 where pk=2)

Saludos,
Carlos
.

Respuesta Responder a este mensaje
#4 Alejandro Mesa
31/10/2009 - 23:25 | Informe spam
Carlos,

Que te parece esta proposicion de tener algun mechanismo automatico que haga
este update. Yo vote tan pronto lo vi, hace ya algun tiempo.

Add automatically maintained columns (perhaps just update_date, update_user
https://connect.microsoft.com/SQL/f...FeedbackID 3570&wa=wsignin1.0


AMB


"Alejandro Mesa" wrote:

Carlos M. Calvelo,

> Y si se hace un update sobre la columna pk? :-)
> (update A set pk=3 where pk=2)

Entonces estamos jodidos.

En serio, es una buena pregunta. Si tu pk puede cambiar, entonces usa una
llave subrrogada.

AMB


"Carlos M. Calvelo" wrote:

> Hola Alejandro,
>
> On 31 okt, 19:43, Alejandro Mesa
> wrote:
> > Dentro de los triggers "AFTER", tienes acceso a dos tablas virtuales
> > "deleted" e "inserted" donde puedes ver las filas a las que se actualizo.
> >
> > Si tu tabla tiene una clave primaria entonces puedes unir tu tabla con la
> > tabla "inserted" para tener acceso solo a las filas que se actualizaron.
> >
> > update A
> > set A.ult_fecha_actualiz = getdate()
> > from anex_control as A inner join inserted as I on A.pk = I.pk;
> >
>
> Y si se hace un update sobre la columna pk? :-)
> (update A set pk=3 where pk=2)
>
> Saludos,
> Carlos
> .
>
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
01/11/2009 - 00:06 | Informe spam
Hola Alejandro,

On 31 okt, 23:19, Alejandro Mesa
wrote:
Carlos M. Calvelo,

> Y si se hace un update sobre la columna pk? :-)
> (update A set pk=3 where pk=2)

Entonces estamos jodidos.



Pues si. Jode un poquito :-)


En serio, es una buena pregunta. Si tu pk puede cambiar, entonces usa una
llave subrrogada.




Ya. Pero esa clave debería ser invisible, hasta para el
programador de aplicaciones. Sino acabará siendo una
clave natural.

En todo caso reaccioné para que le OP sea consciente
del problema.

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