none
Trigger para descontar inventario RRS feed

  • Pregunta

  • Amigos buenas tardes , he realizado un trigger para descontar el inventario en varias tablas  , este muy funciona bien  , pero mi duda es si es la forma correcta de generar esta sentencia , les comparto mi codigo y  espero me corrijan.

    CREATE TRIGGER DISMINUIRINVENTARIO
    ON tlbGasto FOR INSERT
    AS 
       SET NOCOUNT ON 

       UPDATE SAEXIS SET SAEXIS.Existen = SAEXIS.Existen - inserted.Cantidad from inserted
       inner join SAEXIS on SAEXIS.CodProd = inserted.Codigo AND SAEXIS.CodUbic = inserted.CodUbic

       UPDATE SAPROD SET SAPROD.Existen = SAPROD.Existen - inserted.Cantidad from inserted
       inner join SAPROD on SAPROD.CodProd = inserted.Codigo

       UPDATE SALOTE SET SALOTE.Cantidad= SALOTE.Cantidad- inserted.Cantidad , SALOTE.Comprometido= SALOTE.Comprometido - inserted.Cantidad from inserted
       inner join SALOTE on SALOTE.CodProd = inserted.Codigo and SALOTE.CodUbic = inserted.CodUbic and SALOTE.NroLote = inserted.Lote


    GO


    Daniel

    jueves, 7 de mayo de 2020 22:12

Respuestas

  • Hola Daniel:

    pero mi duda es si es la forma correcta de generar esta sentencia , les comparto mi codigo y espero me corrijan.

    Si es la forma correcta. Los tratas como conjuntos, da igual que se inserte una fila que varias.

    Sólo le puedes añadir alguna mejora, como tratamiento de errores.

    ALTER TRIGGER dbo.DISMINUIRINVENTARIO
    ON tlbGasto FOR INSERT
    AS 
       SET NOCOUNT ON 
       SET XACT_ABORT ON 
    	BEGIN TRY
    	BEGIN TRAN
    
    
    		UPDATE SAEXIS SET SAEXIS.Existen = SAEXIS.Existen - inserted.Cantidad from inserted
    		inner join SAEXIS on SAEXIS.CodProd = inserted.Codigo AND SAEXIS.CodUbic = inserted.CodUbic;
    
    		UPDATE SAPROD SET SAPROD.Existen = SAPROD.Existen - inserted.Cantidad from inserted
    		inner join SAPROD on SAPROD.CodProd = inserted.Codigo;
    
    		UPDATE SALOTE SET SALOTE.Cantidad= SALOTE.Cantidad- inserted.Cantidad , SALOTE.Comprometido= SALOTE.Comprometido - inserted.Cantidad from inserted
    		inner join SALOTE on SALOTE.CodProd = inserted.Codigo and SALOTE.CodUbic = inserted.CodUbic and SALOTE.NroLote = inserted.Lote;
    
    		COMMIT TRAN;
    	END TRY
    	BEGIN CATCH
    		IF (@@TRANCOUNT > 0)
    			ROLLBACK TRAN;
    		THROW;
    	END CATCH
    
    GO

    • Marcado como respuesta Dannycv012 viernes, 8 de mayo de 2020 21:55
    viernes, 8 de mayo de 2020 3:24

Todas las respuestas

  • Hola Dannycv012, 

      

    Gracias por levantar tu consulta en los foros de MSDN. Entendimos su pregunta y vamos a darle seguimiento para buscar la mejor repuesta pertinente al caso.  

    Cualquier duda referente a productos Microsoft, puedes consultarnos. Es un gusto informarte. 

    Gracias por usar los foros de MSDN.   

    Oystein Edwards 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

     

     

    jueves, 7 de mayo de 2020 23:51
    Moderador
  • Hola Daniel:

    pero mi duda es si es la forma correcta de generar esta sentencia , les comparto mi codigo y espero me corrijan.

    Si es la forma correcta. Los tratas como conjuntos, da igual que se inserte una fila que varias.

    Sólo le puedes añadir alguna mejora, como tratamiento de errores.

    ALTER TRIGGER dbo.DISMINUIRINVENTARIO
    ON tlbGasto FOR INSERT
    AS 
       SET NOCOUNT ON 
       SET XACT_ABORT ON 
    	BEGIN TRY
    	BEGIN TRAN
    
    
    		UPDATE SAEXIS SET SAEXIS.Existen = SAEXIS.Existen - inserted.Cantidad from inserted
    		inner join SAEXIS on SAEXIS.CodProd = inserted.Codigo AND SAEXIS.CodUbic = inserted.CodUbic;
    
    		UPDATE SAPROD SET SAPROD.Existen = SAPROD.Existen - inserted.Cantidad from inserted
    		inner join SAPROD on SAPROD.CodProd = inserted.Codigo;
    
    		UPDATE SALOTE SET SALOTE.Cantidad= SALOTE.Cantidad- inserted.Cantidad , SALOTE.Comprometido= SALOTE.Comprometido - inserted.Cantidad from inserted
    		inner join SALOTE on SALOTE.CodProd = inserted.Codigo and SALOTE.CodUbic = inserted.CodUbic and SALOTE.NroLote = inserted.Lote;
    
    		COMMIT TRAN;
    	END TRY
    	BEGIN CATCH
    		IF (@@TRANCOUNT > 0)
    			ROLLBACK TRAN;
    		THROW;
    	END CATCH
    
    GO

    • Marcado como respuesta Dannycv012 viernes, 8 de mayo de 2020 21:55
    viernes, 8 de mayo de 2020 3:24