Bases de Datos > SQL Server

 UPDATE APARTIR DE CONSULTA

(1/1)

JoseServer:
Hola que tal amigos, necesito ayuda para un procedimiento que quiero hacer
para actualizar uns registros, que es este:

tengo las tablas tblVentas , tblDescripcionVenta  de las que voy a eliminar una venta, (par el dado caso de una cancelacion o algo relacionado)
Al eliminar la venta, quiero regresar a la tabla tblProductos las cantidades de producto que se hiban a vender (campo existencia).


ALTER PROCEDURE spSESPOSDelVenta
   @idVenta int
AS
BEGIN
   SET NOCOUNT ON;
   DECLARE @idproducto int;
   DECLARE @cantidad int;
   
   
   WHILE (SELECT idProducto FROM tblProductos WHERE exists (SELECT @idProducto =idProducto ,  @cantidad =cantidad  FROM tblDescripcionVenta WHERE idVenta = @idVenta) )
      BEGIN
      
         UPDATE tblProductos set existencia =( existencia + @cantidad)  
         WHERE idProducto = @idProducto
                  
      END
   
   Delete from tblVentas WHERE  idVenta = @idVenta
   
   Delete from tblDescripcionVenta WHERE idVenta = @idVenta
   
END

Como seria , de antemano gracias x sus respuestas...

F_Tanori:
Te recomiendo usarlo de manera transaccional para asegurar su exito,
en este ejemplo se asume que tblDescripcionVenta  contiene el codigo del producto, la cantidad vendida, y se relacciona la tabla de productos a traves del codigo del producto...

Espero Te sirva.


--- Código: SQL ---CREATE PROCEDURE spSESPOSDelVenta@idVenta INTASBEGINSET NOCOUNT ON;    -- Actualizar Almacen    UPDATE tblProductos  SET existencia = (p.existencia + dv.cantidad) FROM tblProductos   p    INNER JOIN tblDescripcionVenta dv ON dv.codigo = p.codigo    WHERE idventa = @idVenta     --Eliminar Ventas ( se perderan consecutivos !)    DELETE FROM tblVentas       WHERE id_venta=@idVenta    DELETE FROM tblDescripcionVenta WHERE id_venta=@idVenta END 


--- Código: SQL ---EXEC spSESPOSDelVenta 18 

JoseServer:
Gracias   :D , funcionó muy bien.

La verdad ya lo tenia asÍ:

 UPDATE  tblProductos
      SET existencia = existencia +
      (Select DV.cantidad FROM tblDescripcionVenta as DV WHERE DV.idProducto = tblProductos.idProducto AND DV.idventa=@idVenta)
      WHERE tblProductos.idProducto IN (Select DV.idProducto FROM tblDescripcionVenta as DV WHERE  DV.idventa=@idVenta)

Pero es mas corto y mejor tú  Trans-sql .   :good:

POST CERRADO - RESUELTO.  :good:

F_Tanori:
Claro, a la larga (conforme aumenta el numero de registros, las subconsultas se vuelven pesadas)

Saludos

Navegación

[0] Índice de Mensajes

Ir a la versión completa