Ver Mensaje Individual
  #1  
Antiguo 25-11-2022
pabje pabje is offline
Miembro
 
Registrado: dic 2021
Posts: 10
Reputación: 0
pabje Va por buen camino
Trigger para acualizar la taba current_stock de productos

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


Código:
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
Responder Con Cita