Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-11-2022
pabje pabje is offline
Miembro
 
Registrado: dic 2021
Posts: 10
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Consulta de No coincidentes para productos no vendidos ctronx MySQL 6 04-04-2017 01:45:36
Problema para Mostrar Productos en un Formulario samael205 Gráficos 3 02-04-2012 17:52:04
Proceso para subvencionar productos (Solo algunos) oscarac SQL 5 08-11-2011 17:35:02
Buscador de Productos Para Pantalla Tactil GlauK Varios 1 24-07-2008 17:38:19
Grabar de tabla a taba veronica Conexión con bases de datos 10 04-04-2008 13:28:06


La franja horaria es GMT +2. Ahora son las 19:40:25.


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