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

Gracias iislas por tu comentario, aunque es recomendable lo que decis, lamentablamante tengo que hacerlo con triggers.

El error se encontraba en el set nocount , pues al setear esta propiedad en ON , SQL no retorna la cantidad de filas afectadas, entonces nunca pasaba el IF @@ROWCOUNT > 1 .

Con esto ya funcionaba, pero solo para los registros afectados, dando comoresultado un stock que no era el requerido.

Tambien hay que replicar el proceso pero primero con la tabla Deleted , y luego con la Iserted.
De esta forma se obtiene el stock actualizado en base a la tabla movimientos de stock.

paso a detallar como seria el codigo:

ALTER TRIGGER [Movstock_ONUPDATExLOTE] ON [dbo].[Movstock]
AFTER UPDATE
AS
IF @@ROWCOUNT > 1
BEGIN

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


UPDATE A
SET STOCK = 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

**Aclaro que este trigger solo funciona para operaciones sobre mas de una fila!!