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:
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

Respuesta Responder a este mensaje
#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:

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:
> 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
>



Respuesta Responder a este mensaje
#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:
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:

> 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:
> > 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
> >
>
>
>
Respuesta Responder a este mensaje
#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:

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 ?

Respuesta Responder a este mensaje
#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:

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:

> 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 ?
>

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida