Triggers y Store Procedure

07/09/2005 - 17:32 por Francisco Goncalves | Informe spam
Hola

Soy nuevo en esto de los StoreProcedure.

Estoy incluyendo una llamada a un StoreProcesure dentro de un Trigger y no
lo ejecuta.

El Código:

CREATE TRIGGER [insMovimientosDetal] ON [dbo].[MovimientosDetail]
FOR INSERT
AS

DECLARE @idproducto as Varchar(30)

SELECT @idproducto=inserted.idproducto
FROM inserted, MovimientosDetail md
WHERE inserted.iddetail=md.iddetail

EXEC ActualizaAntesDespuesProductoUnico @idproducto


Si ejecuto el StoreProcedure por separado sí funciona.

A qué se debe ?

De antemano Gracias

Preguntas similare

Leer las respuestas

#1 Maxi
07/09/2005 - 18:13 | Informe spam
Hola, ojo con lo que estas haciendo!! ese trigger lo estas pensando para un
solo registro y los triggers los debes pensar para un conjunto de registros.

No se bien que hace ese SP pero podrias emular lo mismo dentro del trigger
con sentencias SQL


Maxi - Buenos Aires - Argentina
Desarrollador 3 Estrellas

Msn_messager:
mail: Maxi.da[arroba]gmail.com

"Francisco Goncalves"
escribió en el mensaje
news:
Mostrar la cita
#2 Francisco Goncalves
07/09/2005 - 18:37 | Informe spam
Ok Maxi... Me explico mejor...

Incluso pegué el código del SP en el trigger y no lo hace. Es de hacer
notar que el SP utiliza un Cursor (para muy pocos registros, por ahora!!!)

Lo que hace el SP es afectar varios registros de movimientos de ese producto
calculando las cantidades de inventario antes y después del movimiento, es
decir, no es un solo registro.

Me explico ?

"Maxi" wrote:

Mostrar la cita
#3 Eleazar
07/09/2005 - 20:24 | Informe spam
Hola entiendo a lo que se refiere Maxi ('pensar para un conjunto de
registros') es en la llamada del sp dentro del trigger (solo serviria para
un registro) , mejor envianos el codigo completo

"Francisco Goncalves"
escribió en el mensaje
news:
Mostrar la cita
producto
Mostrar la cita
un
Mostrar la cita
registros.
Mostrar la cita
trigger
Mostrar la cita
y no
Mostrar la cita
#4 ulises
07/09/2005 - 20:58 | Informe spam
Francisco,

Lo que te indica Maxi es que el trigger se invoca SOLO una vez luego de
ejecutar la sentencia de actualización (que podría haber afectado varias
filas) y no por cada fila actualizada.

Creo que sería recomendable que indiques que es lo que necesitas hacer para
poder ayudarte mejor.

Saludos,
Ulises

"Francisco Goncalves" wrote:

Mostrar la cita
#5 Francisco Goncalves
09/09/2005 - 00:52 | Informe spam
Ok... acá les envío el código.

TRIGEER:

CREATE TRIGGER [insMovimientosDetal] ON [dbo].[MovimientosDetail]
FOR INSERT
AS

DECLARE @idproducto as Varchar(30)

SELECT @idproducto=inserted.idproducto
FROM inserted, MovimientosDetail md
WHERE inserted.iddetail=md.iddetail

EXEC ActualizaAntesDespuesProductoUnico @idproducto
-
NOTA: Se harán tantos Inserts como productos cargue el usuario.


Acá va el SP:

CREATE PROCEDURE [ActualizaAntesDespuesProductoUnico] @idproducto as
Varchar(30) AS

DECLARE @fecha as datetime, @despues as money
DECLARE @iddetail as int, @saldo as money, @antes as money, @cantidad as
money, @categoria as char(1)

select @despues=isnull(md.despues,0), @fecha=mm.fecact
from MovimientosDetail md, MovimientosMaster mm
where md.idmaster=mm.idmaster and
mm.idtipomovimiento—
and convert(varchar,fecha,111)='2004/12/31'
and md.idproducto=@idproducto

BEGIN TRAN

DECLARE detalle_cursor CURSOR FAST_FORWARD FOR
select md.iddetail, md.cantidad, tm.categoria
from MovimientosDetail md, MovimientosMaster mm, TiposMovimientos tm
where md.idmaster=mm.idmaster
and mm.idtipomovimiento=tm.idtipomovimiento
and fecact>@fecha
and md.idproducto=@idproducto
and mm.idtipomovimiento<>97
order by mm.fecact

OPEN detalle_cursor

FETCH NEXT FROM detalle_cursor
INTO @iddetail, @cantidad, @categoria

WHILE @@FETCH_STATUS = 0
BEGIN

SET @antes = @despues

IF (@categoria='E')
BEGIN
SET @despues = @despues + @cantidad
END
ELSE
BEGIN
SET @despues = @despues - @cantidad
END

UPDATE MovimientosDetail SET antes=@antes, despues=@despues where
iddetail=@iddetail

FETCH NEXT FROM detalle_cursor
INTO @iddetail, @cantidad, @categoria

END

CLOSE detalle_cursor
DEALLOCATE detalle_cursor

COMMIT TRAN

El SP debe ejecutar por cada registro insertado en la tabla
MovimientosDetail y afectará todos los registro de movimientos hasta la fecha
para cada producto insertado.

Que sugerencias me pueden dar ? Apartando el hecho del uso de los Cursores
claro...

Gracias





"ulises" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida