Recorrer un cursor
Publicado por Consuelo (20 intervenciones) el 05/05/2006 19:14:47
Qué tal he creado un procedimiento pero no se que hacer para que recorra cada una de los registros, que tiene, por ejemplo, hice esta tabla para ver si mi procedimiento esta bien.
Tabla Prueba_Proc
-----------------------------------
Clave | Valor
1 |
2 |
3 |
4 |
5 |
Después hice mi procedimiento para que solo actualizara la columna valor con un numero consecutivo.
CREATE PROCEDURE dbo.ProcPrueba AS
DECLARE @cont INTEGER, @a_clave INTEGER
SET @cont=0;
DECLARE a CURSOR FOR (SELECT clave FROM Med.dbo.Prueba_Proc) OPEN a FETCH NEXT FROM a INTO @a_clave
WHILE @@FETCH_STATUS=0
BEGIN
SET @cont=@cont+1
UPDATE Med.dbo.prueba SET valor=@cont WHERE clave=@a_clave;
END CLOSE a
DEALLOCATE a
EXECUTE master.dbo.prueba
Como pueden ver solo tomo todos los valores que haya dentro de la columna clave de mi tabla Prueba_Proc y después la idea erá el recorrer registro a registro y actualizar su correspondiente columna de "Valor", pero cuando ejecuto el procedimiento se queda horas trabajando y cuando lo detengo y veo la tabla que hice me muestra esto:
Tabla Prueba_Proc
-----------------------------------
Clave | Valor
1 | 2690
2 | NULL
3 | NULL
4 | NULL
5 | NULL
Eso quiere decir entónces que el cursor solo se quedo en el primer registro jamás pasa al siguiente. Pero si le quito el while que hay entónces el procemiento no hace nada y me deja todos los valores en NULL.
Por favor me pueden decir como hacer para que esta función pueda recorrer registro a registro cada valor de la tabla.
Con eso ya puede corregir el procemiento que hice para la generación de una tabla dedicada a CUBOS el cual es bastante extenso. Por favor es todo lo que me falta.
Tabla Prueba_Proc
-----------------------------------
Clave | Valor
1 |
2 |
3 |
4 |
5 |
Después hice mi procedimiento para que solo actualizara la columna valor con un numero consecutivo.
CREATE PROCEDURE dbo.ProcPrueba AS
DECLARE @cont INTEGER, @a_clave INTEGER
SET @cont=0;
DECLARE a CURSOR FOR (SELECT clave FROM Med.dbo.Prueba_Proc) OPEN a FETCH NEXT FROM a INTO @a_clave
WHILE @@FETCH_STATUS=0
BEGIN
SET @cont=@cont+1
UPDATE Med.dbo.prueba SET valor=@cont WHERE clave=@a_clave;
END CLOSE a
DEALLOCATE a
EXECUTE master.dbo.prueba
Como pueden ver solo tomo todos los valores que haya dentro de la columna clave de mi tabla Prueba_Proc y después la idea erá el recorrer registro a registro y actualizar su correspondiente columna de "Valor", pero cuando ejecuto el procedimiento se queda horas trabajando y cuando lo detengo y veo la tabla que hice me muestra esto:
Tabla Prueba_Proc
-----------------------------------
Clave | Valor
1 | 2690
2 | NULL
3 | NULL
4 | NULL
5 | NULL
Eso quiere decir entónces que el cursor solo se quedo en el primer registro jamás pasa al siguiente. Pero si le quito el while que hay entónces el procemiento no hace nada y me deja todos los valores en NULL.
Por favor me pueden decir como hacer para que esta función pueda recorrer registro a registro cada valor de la tabla.
Con eso ya puede corregir el procemiento que hice para la generación de una tabla dedicada a CUBOS el cual es bastante extenso. Por favor es todo lo que me falta.
Valora esta pregunta


0