SQL Server - Duda tal vez tonta Acerca de Triggers

   
Vista:

Duda tal vez tonta Acerca de Triggers

Publicado por Carlos Restrepo (7 intervenciones) el 02/12/2010 15:50:00
Buen Día


Tengo una duda acerca de los triggers, resulta que tengo un trigger que dependiendo de una condicion en el update lanza un sp, mi duda es:

El trigger finaliza la operación cuando lanza el sp, o espera a que finalice el sp para finalizar el mismo su proceso.

El problema es que el Sp en algunas ocasiones puede tardar bastante en finalizar, otras veces puede no tardarse, el sp es bastante complejo pues es un sistema de localización global de vehiculos, en algunas ocasiones tiene que procesar hasta 7000 vehiculos y en otras tal vez uno o dos, pero el SP es llamado desde un trigger en una tabla que si le actualizan un campo, ejecuta el sp, y alli esta mi duda, el trigger esperaria a que finalice el sp para dar por terminado su propio proceso o cuando lanza el sp se desentiende y finaliza su ejecución.

Gracias

Carlos Restrepo
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
Imágen de perfil de Isaias

RE:Duda tal vez tonta Acerca de Triggers

Publicado por Isaias (3182 intervenciones) el 02/12/2010 20:38:27
¿Estas contemplando que en tus tablas INSERTED y UPDATED, tienes o puedes tener 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:Duda tal vez tonta Acerca de Triggers

Publicado por Carlos Restrepo (7 intervenciones) el 02/12/2010 23:24:28
Buena tarde Isaias

En la tabla que tendría el trigger hay varios registros, pero con el update solo afectaría 1, es una tabla de parámetros de un sistema, que la verdad es bastante complejo, pero la idea es que cuando se realice un cambio en un registro específico de la tabla que cumple con unos criterios, pues se lance el sp, de lo contrario no.

Lo que no puedo asegurar es que el SP que afecta otras tablas, cuando se ejecute solo verifique un registro o mas de mil, el proceso del SP en algunas ocasiones puede tardar bastante en otras no, pero no afecta la tabla de parametros, esa es solo la que se encargaría de lanzar el sp.

Gracias

Carlos Restrepo
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

RE:Duda tal vez tonta Acerca de Triggers

Publicado por Isaias (3182 intervenciones) el 06/12/2010 04:54:24
Entonces el SP que haga la modificacion, que tambien "lance" al otro procedimiento
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 roger

RE:Duda tal vez tonta Acerca de Triggers

Publicado por roger (173 intervenciones) el 06/12/2010 13:34:15
si, la ejecucion del procedimiento retardará la operacion, y el trigger no terminará hasta que se termine la llamada al procedimiento. Puedes probar este script que se me ocurrió para comprobarlo

create table tablaPruebaTrigger(numero int, nombre varchar(500))
GO
CREATE procedure procedimiento
AS
BEGIN
WAITFOR DELAY '000:00:05'
END
GO
CREATE trigger prueba on tablaPruebaTrigger
AFTER UPDATE,INSERT
AS
BEGIN
EXEC procedimiento
print 'prueba'
END
GO

disable trigger prueba ON tablaPruebaTrigger
insert into tablaPruebaTrigger(numero,nombre)values(3,'registro')
enable trigger prueba ON tablaPruebaTrigger
insert into tablaPruebaTrigger(numero,nombre)values(3,'registro')

Creo que tendrás que pensar en alguna otra estrategia para lo que estas necesitando

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
Imágen de perfil de Isaias

RE:Duda tal vez tonta Acerca de Triggers

Publicado por Isaias (3182 intervenciones) el 06/12/2010 16:28:31
Perdon por mi insistencia, ¿porque querer utilizar los triggers para algo que no fueron creados?
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 roger

RE:Duda tal vez tonta Acerca de Triggers

Publicado por roger (173 intervenciones) el 06/12/2010 16:36:22
por lo que entiendo se quiere ejecutar un procedimiento almacenado (que actualice, modifique, no se), cuando se cambie el valor de un campo de una tabla. Me parece completamente normal hacerlo por triggers que es cuando se detecta la ocurrencia de la actualización, ya el problema se le presenta en que el proceso que quiere ejecutar es muy pesado, por lo cual le sugiero a Carlos Restrepo verificar otra estrategia para hacer lo que requiere. Entendimos lo mismo?, tienes alguna alternativa para colaborarle a Carlos?

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
Imágen de perfil de Isaias

RE:Duda tal vez tonta Acerca de Triggers

Publicado por Isaias (3182 intervenciones) el 06/12/2010 18:30:00
"Me parece completamente normal hacerlo por triggers".

Difiero en esa aseveracion, ya que los triggers, insisto, fueron creados para salva-guardar el DRI (Integridad referencial)
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 roger

RE:Duda tal vez tonta Acerca de Triggers

Publicado por roger (173 intervenciones) el 06/12/2010 19:47:24
pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una vista, etc. http://en.wikipedia.org/wiki/Database_trigger

Si sirve o no para el caso particular del compañero, creo que es una decisión que puede tomar en base las ideas que se le aporten con respecto al tema. No digamos solo que no se pueden o no se deben hacer las cosas.

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:Duda tal vez tonta Acerca de Triggers

Publicado por Carlos Restrepo (7 intervenciones) el 06/12/2010 20:56:24
Buen día

que pena no haber revisado antes pero es que estaba fuera de la ciudad y buen en un área de poca cobertura, en fín el caso es como lo dice Roger, cuando utilizo un trigger detecto el valor de un campo para saber si fue actualizado un campo con un valor específico, y dependiendo de ese valor lanzo el SP, ahora bien les comento cual es mi problema exactamente.

tengo un sistema de posicionamiento global, en la bd tengo un Sp que determina si un vehiculo esta o no dentro de una geocerca, el sp debe estar corriendo seguidamo, es decir hace un select que en algunas ocasiones puede trar un vehiculo y en otras hasta 7000 que tengo monitoreados en este momento, y por cada uno determina si entro en una geocerca específica o no, cuando haga todo el recorrido debe volver a comenzar, en estos momento tengo el procedimiento corriendo en C/sharp, pero lo migre todo a T-Sql y pues creo que funcionaria mejor, y mucho mas rapido sin la interface, por que esta totalmente dentro de la bd, intente con los jobs, pero esos se ejecutan cada determinado tiempo y pues nunca sabre cuanto tardo en ejecutarse un sp o no, por lo que les digo que a veces puede ser uno o dos registros otras veces N.

Que idea me dan para que el Sp corra continuamente sin necesidad de un JOB, pense que con un trigger, pero ahi nacio mi inquietud de si el trigger finaliza su ejecucion solo con el llamado al SP o espera a que el Sp finalice para el finalizar su proceso.

Que idea ma dan?

Gracias
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 roger

RE:Duda tal vez tonta Acerca de Triggers

Publicado por roger (173 intervenciones) el 06/12/2010 22:50:19
para lo que quieres, yo diria que lo mas conveniente es el job, si por ejemplo le pones de periodicidad 1 minuto, pero el procedimiento tarda 20 minutos en ejecutarse no hay problema, el procedimiento continua corriendo, y hasta que no termine, no se volvera a ejecutar de acuerdo a la periodicidad definida. Me parece que esa es la inquietud por la cual no utilizas jobs, o me equivoco?

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
Imágen de perfil de Isaias

RE:Duda tal vez tonta Acerca de Triggers

Publicado por Isaias (3182 intervenciones) el 06/12/2010 22:15:10
Nunca dije que NO SE PUDIERA, pero si comente que desde mi punto de vista muy personal y en base a mi experiencia, NO SE DEBEN UTILIZAR para ejecutar PROCEDIMIENTOS ALMACENADOS.
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 roger

RE:Duda tal vez tonta Acerca de Triggers

Publicado por roger (173 intervenciones) el 07/12/2010 13:45:06
repito "No digamos solo que no se pueden o NO SE DEBEN hacer las cosas.", mientras discutes conmigo para demostrar que tienes la razón en lo que dices, puedes tratar de darle una solucion a Carlos Restrepo, que de seguro con tu experiencia sabrás alguna forma de como SI se debe hacer.

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:Duda tal vez tonta Acerca de Triggers

Publicado por Carlos Restrepo (7 intervenciones) el 07/12/2010 15:07:42
Buen Día

Ok, señores, mil y mil gracias por sus aportes y que pena el haberlos puesto en esta discusión, lo haré con el Job, siguiendo sus recomendaciones, gracias por el tiempo y pues a la orden en lo que necesiten si esta a mi alcance.

Muchas gracias


Carlos Restrepo
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