SQL - Trigger llamando un exe Personalizado

   
Vista:

Trigger llamando un exe Personalizado

Publicado por Unomásnomás (36 intervenciones) el 29/12/2008 17:27:23
Que tal, espero puedan ayudarme...
He creado un trigger a una Tabla X que se dispara cuando ocurre el Evento INS y UPD; en el en la parte final de ese trigger llamo un programita exe de mi invención heco en vb6 usando el sgte codigo:

EXEC master..xp_cmdshell @sPahtProgram, no_output

Cuando lo llamo solito me funciona perfecto pero, cuando lo llamo con el codigo completo del trigger se queda pensando y pensando y pensando.. lo curioso es que e programita aparece cargado en la lista de Tareas del windows pero al parecer no termina y no sé porque tampoco.
Les aviso que el programita en vb tambien lo he probado ejecutando solo a él y funciona perfectamente solo que cuando lo llamo desde el trigger se queda pensando y no see porque razon...
Este es el codigo del trigger

CREATE TRIGGER TR_ALERTA ON esami
FOR INSERT, UPDATE
AS
DECLARE
@idExamen int,
@idEquipo int
-- @sPahtProgram varchar(100)
-- SET @sPahtProgram = 'C:ShowByTrigger.exe'

SELECT @idExamen = IDEsa, @idEquipo = IDAbb FROM inserted

IF @idExamen is null --Es xq no ocurrió el evento INS
SELECT @idExamen = IDEsa, @idEquipo = IDAbb FROM deleted

--Con las variables cargadas insertar a la tabla para q posteriormente se elimine en el progr. exe.
INSERT INTO REG_UPDINS
(MaqHost, idExamen, idEquipo) VALUES (HOST_NAME(), @idExamen, @idEquipo)

EXEC master..xp_cmdshell 'C:WINDOWSsystem32vbpSendAlerta.exe', no_output
RETURN

Finalizo diciendo que el programita por el momento lo unico que hace es eliminar el registro generado en la tabla REG_UPDINS desde el trigger. Espero puedan ayudarme
Gracias y Feliz año
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

RE:Trigger llamando un exe Personalizado

Publicado por Christian Calvo (22 intervenciones) el 30/12/2008 05:33:55
no olvides registrarte en los foros de www.rdba.com.mx

Mira, tu caso si es un poco complicado pero como ejemplo practico, manda llamar al exe pero que el programa no toque ninguna de las tablas involucradas en el trigger, ni la que lanza el trigger ni las que afectas, que el exe toque otras tablas si quieres, unas que inventes en el momento, y me dices que pasa, si se sigue pasmando o no y en base a eso te doy una mejor respuesta (ahora si no se me ocurre ni por donde...) 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:Trigger llamando un exe Personalizado

Publicado por Unomásnomás (36 intervenciones) el 31/12/2008 15:50:08
Gracias por responder Christian,
Pues el programita que llama el trigger toca otra tabla; Lo que el trigger hace es que se genere un registro en esa otra tabla y el programita cuando se ejecute se supone toma ese registro lo procesa (hace todo lo que tiene que hacer) y elimina ese registro.
Pero el problema es que el programita se queda allí como si quedase congelado.
Cuando intento probar el trigger realizando un upd de esa tabla se queda como pensando cuando modifico el registro desde el Enterprise Manager de SQL..
Entonces para q tampoco se cuelgue el SQL lo que hago es Terminar el proceso en el Administrador de Tareas.
Te comento que lo curioso es que el programita no aparece en la Barra de Tareas solo aparece en el Administrador de Tareas como proceso.

Ok, te agradezco y que tengan un Feliz Año a la gentita del foro...
Mucha suerte.!!!
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:Trigger llamando un exe Personalizado

Publicado por Christian Calvo (22 intervenciones) el 04/01/2009 20:54:17
Bueno a lo que me refiero es que pruebes con el programa que no toque ninguna de las tablas no solo la que dispara el trigger sino las que usas dentro del trigger como esa "otra", es decir, que el exe no interactue para nada con el trigger, a ver si me explico

Cuando ejecutas un trigger SQL trabaja con replica de tablas en el log de transacciones, si desde tu trigger afectas una tabla "Y" (que no es la del trigger), estas ocupando el log de transacciones con tablas "copia" de la original, si externamente quieres actualizar un registro de esa tabla no podrías porque esta bloqueada por el trigger, es decir, supongamos que tu trigger esta sobre un insert de la tabla "X" y dentro del trigger insertas un registro en la tabla "Y" y el programita quiere quitar ese registro de la tabla "Y", la tabla "Y" esta bloqueada por el trigger ya que hay una transaccion implicita, y seguro por eso no te deja.

A lo que me referia es que pruebes donde tu programa haga otra cosa diferente, por ejemplo, un insert en una tabla "Z", que no sea parte del procedimiento del trigger, a ver si tambien se traba.
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