03/03/2010, 13:54
|
| | Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 10 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!! |