Trigger sencillo de Update

01/12/2006 - 12:27 por Oskar | Informe spam
Hola a todos.
Estoy empezando con esto de los Trigger y quisiera saber como hacer un
trigger que grabe un registro en una tabla cada vez que se modifica alguno
de los campos que yo le indique de otra.

Supongamos que yo tengo una tabla que se llama T1 que tiene muchos campos
pero yo solo quiero que grabe en la tabla AUDIT un registro cuando se
modifique el campo C1 o el C2, si se modifica algún otro campo no quiero que
inserte nada.

¿Como haría esto de la forma más sencilla?

Con algún ejemplo que he visto por Internet he hecho esto pero me da error
en el UPDATE()



CREATE TRIGGER [GrabaAudit] ON [dbo].[T1]

FOR UPDATE AS

begin

Declare @Nombre nvarchar(12)

IF (UPDATE(C1) OR UPDATE(C2))

begin

select @Nombre = nombre from update

End



begin

Insert into AUDIT

(Nombre, fecha)

values(@barras,GETDATE())

End


End





Muchas gracias
 

Leer las respuestas

#1 Eladio Rincón
01/12/2006 - 12:47 | Informe spam
Oskar,

debes tener en cuenta que el trigger se activará una y solo una vez por cada
sentencia de actualización. Incluso sin haber modificado ninguna fila.

por lo tanto deberías modificar la consulta de la siguiente forma:


IF (UPDATE(C1) OR UPDATE(C2))
Insert into AUDIT
(Nombre, fecha)
select nombre, getdate() from update


Otra cosa que deberías validar es si realmente hay filas afectadas al entrar
al trigger; recuerda: el trigger se activará independientemente de que haya
o no modificaciones. Por lo que podrías hacer:


if @@rowcount = 0
return

y así te evitas que SQL Server tenga que pasar por el resto del código del
trigger :)





Saludos,

Eladio Rincón,
Mentor Solid Quality Learning
SQL Server MVP


Visita mi página web
Artículos, recursos y trucos de SQL Server 2000 y 2005
http://www.siquelnet.com


"Oskar" wrote in message
news:
Hola a todos.
Estoy empezando con esto de los Trigger y quisiera saber como hacer un
trigger que grabe un registro en una tabla cada vez que se modifica alguno
de los campos que yo le indique de otra.

Supongamos que yo tengo una tabla que se llama T1 que tiene muchos campos
pero yo solo quiero que grabe en la tabla AUDIT un registro cuando se
modifique el campo C1 o el C2, si se modifica algún otro campo no quiero
que inserte nada.

¿Como haría esto de la forma más sencilla?

Con algún ejemplo que he visto por Internet he hecho esto pero me da error
en el UPDATE()



CREATE TRIGGER [GrabaAudit] ON [dbo].[T1]

FOR UPDATE AS

begin

Declare @Nombre nvarchar(12)

IF (UPDATE(C1) OR UPDATE(C2))

begin

select @Nombre = nombre from update

End



begin

Insert into AUDIT

(Nombre, fecha)

values(@barras,GETDATE())

End


End





Muchas gracias




Preguntas similares