PDA

Ver la Versión Completa : Por que da otros resultados un Sp de sql server usando cursores


alexander66
28-08-2006, 16:14:22
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 %
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.

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.


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.