Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Trigger para acualizar la taba current_stock de productos (https://www.clubdelphi.com/foros/showthread.php?t=95982)

pabje 25-11-2022 19:37:25

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



La franja horaria es GMT +2. Ahora son las 01:44:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi