Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Por que da otros resultados un Sp de sql server usando cursores (https://www.clubdelphi.com/foros/showthread.php?t=34999)

alexander66 28-08-2006 16:14:22

Por que da otros resultados un Sp de sql server usando cursores
 
saludos club, disponemos de sql server 2000 standard edition, el cual he creado un store procedure para hacer unas actualizaciones de precios de ventas y consiste en que aumenta el precio de venta en un 10 % si la existencia es menor a 1000 en caso contrario un 5 %
Código PHP:

la tabla es esta:
CREATE TABLE [dbo].[Productos] (
 [
Prodcuto_id] [int] IDENTITY (1, 1) NOT NULL ,
 [
producto] [varchar] (50) COLLATE Latin1_General_BIN NULL ,
 [
existencia] [float] NULL ,
 [
preciovta] [float] NULL ,
 [
Porcentaje] [float] NULL
) ON [PRIMARY] 

El sp es el siguiente pero se supone que con un bucle de cursor me actualizaria el precio_venta pero no es asi me da otro valores como resultado, sin importarle que valor tenga en el campo existencia.

Código PHP:

CREATE PROCEDURE incrementa AS
Declare @
Producto varchar(50)
Declare @
Existencia Numeric(18,2)
Declare 
curejemplo  Cursor For
Select producto, existencia from Productos
open curejemplo
Begin Transaction
Fetch next from curejemplo into 
@Producto, @Existencia
If @@Fetch_status = 0
 begin
 
if @Existencia < 1000
 update Productos set preciovta 
= preciovta * 1.10
 
else
 if @
Existencia > 1000
 update Productos set preciovta 
= preciovta * 1.05

Fetch next from curejemplo into 
@Producto, @Existencia
end
Commit Transaction
close curejemplo
Deallocate curejemplo
GO 

Gracias, tambien pense en modificar el sp de este modo y alamcenar el porcentaje en el campo Porcentaje y aun asi no da el resultado apropiado preciovta = preciovta * 0.1.

edgusano 28-08-2006 18:44:12

Revisa la condicion del update puesto que por cada pasada del cursos esta actualizando todos los registros de la tabla productos y no en el que va el cursor.

luisgutierrezb 28-08-2006 18:58:18

Bueno, en primera, no veo un bucle que te haga recorrer TODOS los registros de la tabla, por eun ejemplo un while @@Fetch_status = 0
otra cosa, en el update le estas diciendo que te actulice TODOS los campos, no tiene una clausula where que identifique especificamente el campo...

alexander66 29-08-2006 15:15:26

oK gracias club ya modifique el sp y funciono estos son los cambios, en caso dado corriganme si hay algo mal.


Código PHP:

while @@Fetch_status = 0
 begin
 
if @Existencia < 1000
 update Productos set preciovta 
= preciovta * 1.10 where prod_id= @ID
...
un while q- se ejecute mientras y un where para saber a que registro actualizar. 




La franja horaria es GMT +2. Ahora son las 10:36:39.

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