Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/03/2010, 10:27
marianoedu
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 2 meses
Puntos: 0
Triggers - operacion sobre varias filas

Hola a todos, es mi primer post en este foro, soy programador y estoy teniendo unas dificultades con triggers en SQL server.
Los triggers ya estan instalados y corriendo, hay : OnDelete, OnInsert, OnUpdate y cumplen su funcion, el problema se presenta cuando debe actualizar mas de un registro, pues en este caso solo acciona sobre el primer registro.
Leyendo un poco verifique que deberia modificar el codigo para que actualice registros por lote, y me gustaria no utilizar cursores, alguien tiene alguna experiencia en este tema..

ESPECIFICO LAS TABLAS Y CODIGO:

tabla ARTICULOS: (PK : codigodearticulo)

codigodearticulo descripcion stock (suma de entradas y salidas de Movstock)
8722500026435 100 White 6.000



tabla MOVSTOCK (PK: idtransac, suc, linea)

idtransac sucursal linea codigodearticulo tipoMovimiento codigodeposito cantidad
1116 1 1 8722500026435 E 2 4.000
138 1 1 8722500026435 E 1 5.000
248 1 2 8722500026435 E 1 2.000
258 1 1 8722500026435 E 1 3.000
296 1 1 8722500026435 E 1 4.000
389 1 1 8722500026435 I 1 24.000

-----------------------------------------------------------------------------------------------


AHORA TENIENDO LAS TABLAS Y EL TRIGGER:

SI SE ME OCURRE HACER UNA MODIFICACION COMO:

UPDATE MOVSTOCK SET CANTIDAD = 2
WHERE CODIGODEARTICULO= '8722500026435' AND CODIGODEPOSITO = 1

Como resultado se modifican correctamente los 5 regitros en movstock con la cantidad=2,
pero en la tabla ARTICULOS campo STOCK, ME QUEDA 9 EN LUGAR DE -10 !!!


investigando llegue a realizar este trigger que supuestamente se ejecuta cuando la ejecucuion involucra a mas de una fila(@@rowcount), y trabaja con la tabla inserted.
pero me actualiza el campo stock en 0(cero), es lo mejor que tengo hasta ahora.

ALTER TRIGGER [Movstock_ONUPDATExLOTE] ON [dbo].[Movstock]
AFTER UPDATE
AS
SET NOCOUNT ON

IF @@ROWCOUNT > 1
BEGIN
DECLARE @CANTIDAD DECIMAL(11,3)

BEGIN


UPDATE A
SET A.STOCK = A.STOCK
+ (SELECT sum(CASE WHEN I.tipodemovimiento ='I' THEN I.Cantidad ELSE -I.Cantidad END)
FROM INSERTED I
WHERE I.CODIGODEARTICULO = A.CODIGODEARTICULO )
FROM ARTICULOS A
JOIN INSERTED I
ON A.CODIGODEARTICULO = I.CODIGODEARTICULO

END
--

END


gracias