• Viernes 26 de Abril de 2024, 11:58

Autor Tema:  UPDATE APARTIR DE CONSULTA  (Leído 1603 veces)

JoseServer

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
UPDATE APARTIR DE CONSULTA
« en: Martes 12 de Mayo de 2009, 21:24 »
0
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

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: UPDATE APARTIR DE CONSULTA
« Respuesta #1 en: Miércoles 13 de Mayo de 2009, 16:35 »
0
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
  1. CREATE PROCEDURE spSESPOSDelVenta
  2. @idVenta INT
  3. AS
  4. BEGIN
  5. SET NOCOUNT ON;
  6.     -- Actualizar Almacen
  7.     UPDATE tblProductos  SET existencia = (p.existencia + dv.cantidad) FROM tblProductos   p
  8.     INNER JOIN tblDescripcionVenta dv ON dv.codigo = p.codigo
  9.     WHERE idventa = @idVenta
  10.  
  11.     --Eliminar Ventas ( se perderan consecutivos !)
  12.     DELETE FROM tblVentas       WHERE id_venta=@idVenta
  13.     DELETE FROM tblDescripcionVenta WHERE id_venta=@idVenta
  14.  
  15. END
  16.  


Código: SQL
  1. EXEC spSESPOSDelVenta 18
  2.  
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================

JoseServer

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: UPDATE APARTIR DE CONSULTA
« Respuesta #2 en: Miércoles 13 de Mayo de 2009, 19:20 »
0
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

  • Moderador
  • ******
  • Mensajes: 1919
  • Nacionalidad: mx
    • Ver Perfil
Re: UPDATE APARTIR DE CONSULTA
« Respuesta #3 en: Lunes 18 de Mayo de 2009, 00:44 »
0
Claro, a la larga (conforme aumenta el numero de registros, las subconsultas se vuelven pesadas)

Saludos
" ExIsTo y A vEcEs PiEnSo "

NOTA:
===========================================================================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
===========================================================================================================================