Navegando un cursor con SQL Server

08/08/2006 - 03:50 por Fabián Tomás de Paula | Informe spam
Leyendo por allí un amigo me pasó la siguiente instrucción.

DECLARE Articulo SCROLL CURSOR FOR SELECT * FROM Articulo Order By Descrip,
Present

OPEN Articulo

FETCH First FROM Articulo

Esto me devuelve a mi aplicación un cursor con el contenido del primer
registro de la tabla Artículo.
Lo único que debo hacer ahora para navegar el cursor es ejecutar alguna de
las siguientes instrucciones y listo. Navegar

el cursor con esto se hace fácil.

FETCH First FROM Articulo // Me devuelve el primer registro de la tabla
según el orden estab.
FETCH Last FROM Articulo // Me devuelve el último registro de la tabla
según el orden estab.
FETCH Prior FROM Articulo // Me devuelve el anterior registro al actual de
la tabla según el orden estab.
FETCH Next FROM Articulo // Me devuelve el próximo registro al actual de la
tabla según el orden estab.

Esto me devuelve a mi aplicación un cursor con el contenido del primer
registro de la tabla Artículo.
Ahora va mi preg. como logro posicionarme en un Registro en particular y
continuar teniendo la característica tan útil de navegación de un registro.
A lo que voy:
En un ABM de artículos con esto navegaría uno a uno todos los registros,
pero si quisiera ir al Artículo con el Código 2000 y de alli subir o
bajar navegando
no puedo puesto que:

DEALLOCATE Articulo

DECLARE Articulo SCROLL CURSOR FOR SELECT * FROM Articulo WHERE CODINT =
2000 Order By Descrip, Present

OPEN Articulo

FETCH First FROM Articulo

Cualquier otro instrucción que coloque me devuelve un cursor vacío.
También leí que se puede con FETCH devolver un registro en particular.

DEALLOCATE Articulo

DECLARE Articulo SCROLL CURSOR FOR SELECT * FROM Articulo Order By
Descrip, Present

OPEN Articulo

FETCH ABSOLUTE 4 FROM Articulo

Esto me posicina en el Registro Nº 4 de la tabla. El número de registro
varía de acuerdo al orden.
Esto solucionaría mi problema pero no se como OBTENER ese NÚMERO de
REGISTRO en éste caso el 4.

En Visual Foxpro hay una función que te devuelve el número de registro
físico la cual se llama RECNO(),
el valor devuelto por ésta es siempre el mismo sin importar el orden.
Si yo hago: SELECT *, RECNO() AS RECNO FROM ARTICULO Se puede hacer algo
similar con SQL Server.

Desde ya gracias.

Fabián.
 

Leer las respuestas

#1 Carlos Sacristán
08/08/2006 - 08:25 | Informe spam
No es una buena idea usar un cursor para lo que necesitas. Es mucho
mejor utilizar alguna técnica de paginación, pero depende un poco del
lenguaje de programación que estés usando


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Fabián Tomás de Paula" escribió en el mensaje
news:
Leyendo por allí un amigo me pasó la siguiente instrucción.

DECLARE Articulo SCROLL CURSOR FOR SELECT * FROM Articulo Order By


Descrip,
Present

OPEN Articulo

FETCH First FROM Articulo

Esto me devuelve a mi aplicación un cursor con el contenido del primer
registro de la tabla Artículo.
Lo único que debo hacer ahora para navegar el cursor es ejecutar alguna de
las siguientes instrucciones y listo. Navegar

el cursor con esto se hace fácil.

FETCH First FROM Articulo // Me devuelve el primer registro de la tabla
según el orden estab.
FETCH Last FROM Articulo // Me devuelve el último registro de la tabla
según el orden estab.
FETCH Prior FROM Articulo // Me devuelve el anterior registro al actual de
la tabla según el orden estab.
FETCH Next FROM Articulo // Me devuelve el próximo registro al actual de


la
tabla según el orden estab.

Esto me devuelve a mi aplicación un cursor con el contenido del primer
registro de la tabla Artículo.
Ahora va mi preg. como logro posicionarme en un Registro en particular y
continuar teniendo la característica tan útil de navegación de un


registro.
A lo que voy:
En un ABM de artículos con esto navegaría uno a uno todos los


registros,
pero si quisiera ir al Artículo con el Código 2000 y de alli subir o
bajar navegando
no puedo puesto que:

DEALLOCATE Articulo

DECLARE Articulo SCROLL CURSOR FOR SELECT * FROM Articulo WHERE CODINT
2000 Order By Descrip, Present

OPEN Articulo

FETCH First FROM Articulo

Cualquier otro instrucción que coloque me devuelve un cursor vacío.
También leí que se puede con FETCH devolver un registro en particular.

DEALLOCATE Articulo

DECLARE Articulo SCROLL CURSOR FOR SELECT * FROM Articulo Order By
Descrip, Present

OPEN Articulo

FETCH ABSOLUTE 4 FROM Articulo

Esto me posicina en el Registro Nº 4 de la tabla. El número de


registro
varía de acuerdo al orden.
Esto solucionaría mi problema pero no se como OBTENER ese NÚMERO de
REGISTRO en éste caso el 4.

En Visual Foxpro hay una función que te devuelve el número de registro
físico la cual se llama RECNO(),
el valor devuelto por ésta es siempre el mismo sin importar el orden.
Si yo hago: SELECT *, RECNO() AS RECNO FROM ARTICULO Se puede hacer algo
similar con SQL Server.

Desde ya gracias.

Fabián.


Preguntas similares