PDA

Ver la Versión Completa : Trigger para acualizar la taba current_stock de productos


pabje
25-11-2022, 19:37:25
Hola


Sea el siguiente enunciado:
ttps://drive.google.com/file/d/1-OcsagKHPeiSyptQ2dRVbPEmdIVe-rUV/view?usp=share_link

Mi pregunta especifica es para el tercer punto que es la operacion de Update. Como obtengo la cantidad anterior si estoy usando un triger After con la tabla factura_det(faturas detalles)?


Cuando ocurre una acutalizacion del campo cantidad de un registro de factura_det, se ejecutará despues(after)y no antes la sentencia Sql que esta dentro del trigger, por lo que el campo cantidad de facturas_det va a estar ya cambiado, y lo mismo la tabla insertad que contiene datos ya actualizados(ambas no van a tener la cantidad anterior).


Como puedo recuperar esa cantidad anterior para actualizar correctamente la tabla Current_Stock y asi hacer bien el tercer punto del Update del enunciado?


Paso lo que he hecho hasta ahora de código. Hice los dos puntos la operacion Insert y Delete, pero me falta el tercer punto Update en donde tengo la duda. Si me pueden ayudar. Desde ya gracias


CREATE TABLE CURRENT_STOCK (
PRODUCTO_COD INT PRIMARY KEY,
CANTIDAD_ACTUAL INT,
CREATEDUPDATE DATETIME NOT NULL)

CREATE TRIGGER InsersUpDele ON facturasDet
AFTER INSERT, UPDATE, DELETE AS


IF SELECT (COUNT (1) FROM DELETED) > 0
BEGIN
SET @ACCION = 'DELETED'
END
IF SELECT (COUNT (1) FROM INSERTED) > 0
BEGIN
SET @ACCION = 'INSERTED'
END


BEGIN
--INSERCION
IF @ACCION = 'INSERTED'
BEGIN
IF NOT exists (select * from inserted A inner join CURRENT_STOCK B ON B.PRODUCTO_COD = @PRODUCTO_COD )

INSERT INTO CURRENT_STOCK(PRODUCTO_COD,CANTIDAD_ACTUAL, FECHA) VALUE(SELECT PRODUCTO_ COD , "0" + CANTIDAD, FECHA_EMISION FROM INSERTED I INNER JOIN FACTURAS F ON I.FACTURA_NUM = F.FACTURA_NUM)
ELSE
UPDATE CURRENT_STOCK SET C.CANTIDAD_ACUAL = C.CANTIDAD_ACUAL- I.CANTIDAD, C.FECHA= F.FECHA_EMISION FROM CURRENT_STOCK C INNER JOIN
INSERTED I ON C.PRODUCTO_COD = I.PRODUCTO_COD INNER JOIN FACTURAS F ON I.FACTURA_NUM = F.FACTURA_NUM)
WHERRE C. PRODUCTO_COD = I.PRODUCTO_COD
--DELETE
ELSE
BEGIN
UPDATE CURRENT_STOCK SET C.CANTIDAD_ACTUAL = C.ANTIDAD_ACTUAL + I.CANTIDAD, CREATEDUPDATE = F.FECHA EMISION FROM CURRENT_STOCK C INNER JOIN
INSERTED I ON C.PRODUCTO_COD = I.PRODUCTO_COD INNER JOIN FACTURAS F ON I.FACTURA_NUM = F.FACTURA_NUM)
WHERE C.PRODUCTO_COD = I.PRODUCTO_COD
END
END

--UPDATE