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
Ir a la versión completa