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

#6 Carlos M. Calvelo
01/11/2009 - 00:24 | Informe spam
Hola Alejandro,

On 31 okt, 23:25, Alejandro Mesa
wrote:
Mostrar la cita
Me parece una buena proposición. Supongo que habrás votado que si.
Pero no es la solución a este probema en particular.

Yo creo que lo de las tablas deleted e inserted ha fallado en esto
'by design'. Para cada registro sobre el que se hace un update
debería tenerse acceso a su versión 'old' y su versión 'new' sin
tener que recurrir a estos trucos ni depender de los valores de
cualquier columna (automática o no).

Por el momento una clave identity con un control al principio del
trigger (if updated(pk) ...) que rechaze el pudate si se cambia esa
columna, o no dar derecho de update sobre esa columna creo que son
compromisos aceptables. Aceptables.. porque no veo mejores opciones.

Saludos,
Carlos
#7 Alejandro Mesa
01/11/2009 - 14:41 | Informe spam
Carlos,

Creo seria la solucion para el problema planteado por el OP. Cuando queremos
tener columnas de control como cuando fue la ultima vez que se actualizo o
quien fue el ultimo usuario que actualizo la fila.

Para otro tipo de actualizaciones / operaciones, es como tu dices. Si la
clave primaria cambia, entonces no podemos identificar las versiones
correspondiente a la fila. En ese caso una clave subrrogada seria de gran
utilidad para identificar ambas versiones, vieja y nueva.

AMB


"Carlos M. Calvelo" wrote:

Mostrar la cita
#8 kojikabutosv
03/11/2009 - 21:30 | Informe spam
gracias a todos por el tiempo en contestar, veo que lo de los triggers
es un poco más complejo de lo que creía, ahora, en mi caso, me funcionó
con la ayuda de la tablas virtuales "inserted"

Saludos y nuevamente gracias por su tiempo.


Alejandro Mesa escribió:
Mostrar la cita
#9 kojikabutosv
03/11/2009 - 22:10 | Informe spam
Una consulta, si hago uso de las tablas "inserted" o "deleted" es
necesario que haga uso excluvisamente de la columna con clave primaria?
pregunto esto porque en un ejemplo que acabo de estar viendo hay un
ejemplo que para hacer la unión con las tablas virtuales lo hacen con un
campo que almacena un valor NewId(), aunque al final el valor de dicha
columna siempre va a ser único; pero, no es una columna de clave primaria..

Saludos,

kojikabutosv escribió:
Mostrar la cita
#10 Carlos M. Calvelo
04/11/2009 - 01:31 | Informe spam
Hola,

On 3 nov, 22:10, kojikabutosv wrote:
Mostrar la cita
No.

Obviamente esa columna tiene que tener un valor único para poder
identificar cada registro. Vamos que tiene que ser una clave, pero
no necesariamente 'primaria'.

Mostrar la cita
Si está garantizado que esa columna siempre tiene un valor (no puede
ser null) y ese valor es único, entonces esa columa es clave aunque
no se haya definido explícitamente como tal.

La esencia del asunto es el como saber seguro que registros en la
tabla deleted corresponden con que registros en la tabla inserted.
Eso es de lo que se trata al hacer un join como:

deleted d join inserted i on d.col=i.col

Lógicamente estamos suponiendo que col es clave y además no se ha
actualizado. Ahora, 'suponer' eso o 'asegurar' por medio de
restricciones de que realmente siempre sea así... son cosas muy
distintas.

Saludos,
Carlos
Ads by Google
Search Busqueda sugerida