SQL Server - acceso a la fila modificada

 
Vista:

acceso a la fila modificada

Publicado por Jose Miguel (13 intervenciones) el 07/02/2011 10:13:42
Hola, estoy intentando crear un trigger que se dispara cuando se modifica una columna de una tabla, el cuerpo del desencadenador debe llamar un un procedimiento almacenado, pero (aquí está el problema) al desencadenador debo suministrarle un parámetro, que es la clave de la fila modificada y que no es la columna modificada. Como accedo a este valor?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:acceso a la fila modificada

Publicado por Juan Manuel Cruz (59 intervenciones) el 07/02/2011 11:05:55
Si lees con detenimiento los BOL, verás que en los triggers puedes hacer uso de dos tablas especiales, temporales y manejadas por el motor de base de datos: UPDATED y DELETED, que sólo exisitirán dentro del trigger durante el tiempo de ejecución.

Durante un trigger para un UPDATE, puedes hacer uso de esa tabla UPDATED que contendrá el registro modificado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:acceso a la fila modificada

Publicado por Isaias (4557 intervenciones) el 08/02/2011 18:17:43
Aunque yo siempre he sido de la idea que los TRIGGER's no son para tal objetivo, todo dependera de que hace el prodedimiento a invocar...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:acceso a la fila modificada

Publicado por Jose Miguel (13 intervenciones) el 08/02/2011 18:30:33
Muchas gracias por vuestras respuestas, la solución es la que marca Juan Manuel Cruz, aunque no es la tabla UPDATED sino la tabla INSERTED
SET @id=(SELECT Campo FROM inserted)
Eso es lo que me confundía, yo no pensaba que la tabla inserted tuviera las actualizaciones hechas en una fila existente.
Con la funciones:
UPDATE () ó COLUMNS_UPDATED() puedo saber si un campo ha sido modificado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:acceso a la fila modificada

Publicado por Juan Manuel Cruz (59 intervenciones) el 08/02/2011 19:02:13
Eso: Inserted o Updated, las prisas que uno lleva a veces, y la edad :)

Espero que te haya servido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:acceso a la fila modificada

Publicado por Isaias (4557 intervenciones) el 08/02/2011 22:38:08
Creo que si el UDPATE es de un solo registro, no tendras problemas, solo ten en cuenta que si hay una modificacion MASIVA, entonces tendras mas de un registro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:acceso a la fila modificada

Publicado por Jose Miguel (13 intervenciones) el 09/02/2011 08:49:49
Si, ya funciona todo perfectamente, Isaias si que se producirán en ocasiones modificaciones masivas, pero pienso que el disparador se ejecutará por cada una de las modificaciones que se produzcan, es decir como si fuera un foreach, y no pasará a la siguiente modificación hasta que no se completen todas las sentencias pendientes entre ellos el trigger.
Muchas gracias a ambos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:acceso a la fila modificada

Publicado por Isaias (4557 intervenciones) el 09/02/2011 17:35:22
Eso es lo que TU CREES, pero si haces tan solo una prueba, te daras cuenta y desilucioinaras de que no es como tu crees.

Cuando haces, por ejemplo, modificacion de 1000 registros, tendras esos mil registros en tu tabla UPDATED.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:acceso a la fila modificada

Publicado por Jose Miguel (13 intervenciones) el 09/02/2011 17:38:54
Vale, voy a probarlo antes de seguir hablando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:acceso a la fila modificada

Publicado por Jose Miguel (13 intervenciones) el 09/02/2011 18:38:59
Tienes razón, cuando se hace una actualización masiva desde sql server con UPDATE
llena la tabla inserted. Pero yo hago las actualizaciones desde C# y no de forma masiva,
sino mediante un foreach
Por otro lado he comprobado que con un cursor sobre la tabla inserted se soluciona el problema
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

RE:acceso a la fila modificada

Publicado por Isaias (4557 intervenciones) el 10/02/2011 01:37:21
Bueno, eso seria un ishu, de haber una modificacion masiva y "se te olvidara", adios solucion.

Por otro lado, los CURSORES degradan el nivel de respuesta de tu servidor, llegando incluso, a "tirarlo" (dejar que funcione)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar