Trigger con varios registros

01/02/2007 - 20:51 por juan | Informe spam
Hola a todos:

Tengo una tabla (tblMovimientosAlmacen) donde introduzco registros de
entrada y salida de mercancias con los campos: IdArticulo, IdCentro,
UnidEntrada, UnidSalida
En otra tabla (tblArtStock) llevo el stock actual de cada articulo por cada
centro que tengo, con los campos: IdArticulo, IdCentro, StockAc
He creado un Trigger con el fin de que cuando elimino un registro de la
tabla tblMovimientosAlmacen me actualize en la tabla del stock actual.
La situación es que si elimino un unico registro de tblMovimentosAlmacen me
funciona perfectamente; en cambio, si hago un DELETE de varias filas solo me
modifca el primero y el resto ni los toca.
A ver si alguien me puede echar una mano, por que me he vuelto loco con la
ayuda se SQL SERVER 2000.
El trigger es el siguiente:

CREATE TRIGGER EliminaMov ON tblMovimientosAlmacen
FOR DELETE
AS
DECLARE @ArtId nvarchar(50), @CenId tinyint, @CEntrada int, @CSalida int
SELECT @ArtId=IdArticulo, @CenId=IdCentro, @CEntrada=UnidEntrada,
@CSalida=UnidSalida
FROM deleted
UPDATE [tblArtStock]
SET StockAC=StockAC-@CEntrada+@CSalida
WHERE IdArticulo=@ArtId AND IdCentro=@CenId

Gracias por anticipado, un saludo
Juan
 

Leer las respuestas

#1 Alejandro Mesa
01/02/2007 - 21:25 | Informe spam
juan,

Como te has dado cuenta, los triggers se disparan por cada sentencia y no
por cada fila afectada por la sentencia, asi que tienes que tener en cuenta
que multiples filas sean afectadas.

CREATE TRIGGER EliminaMov ON tblMovimientosAlmacen
FOR DELETE
AS

if @@rowcount = 0 return

UPDATE dbo.[tblArtStock]
SET StockAC = StockAC + (
select
sum((-1 * UnidEntrada) + UnidSalida)
from
deleted as d
where
d.IdArticulo = dbo.[tblArtStock].IdArticulo
AND d.IdCentro = dbo.[tblArtStock].IdCentro
)
WHERE exists (
select
*
from
deleted as d
where
d.IdArticulo = dbo.[tblArtStock].IdArticulo
AND d.IdCentro = dbo.[tblArtStock].IdCentro
)
go


AMB



"juan" wrote:

Hola a todos:

Tengo una tabla (tblMovimientosAlmacen) donde introduzco registros de
entrada y salida de mercancias con los campos: IdArticulo, IdCentro,
UnidEntrada, UnidSalida
En otra tabla (tblArtStock) llevo el stock actual de cada articulo por cada
centro que tengo, con los campos: IdArticulo, IdCentro, StockAc
He creado un Trigger con el fin de que cuando elimino un registro de la
tabla tblMovimientosAlmacen me actualize en la tabla del stock actual.
La situación es que si elimino un unico registro de tblMovimentosAlmacen me
funciona perfectamente; en cambio, si hago un DELETE de varias filas solo me
modifca el primero y el resto ni los toca.
A ver si alguien me puede echar una mano, por que me he vuelto loco con la
ayuda se SQL SERVER 2000.
El trigger es el siguiente:

CREATE TRIGGER EliminaMov ON tblMovimientosAlmacen
FOR DELETE
AS
DECLARE @ArtId nvarchar(50), @CenId tinyint, @CEntrada int, @CSalida int
SELECT @ArtId=IdArticulo, @CenId=IdCentro, @CEntrada=UnidEntrada,
@CSalida=UnidSalida
FROM deleted
UPDATE [tblArtStock]
SET StockAC=+@CSalida
WHERE IdArticulo=@ArtId AND IdCentro=@CenId

Gracias por anticipado, un saludo
Juan



Preguntas similares