Obtener un determinado registro en SELECT

06/11/2003 - 17:27 por Ronald Espinosa | Informe spam
Alguien sabe como puedo obtener determinado número de
registro en el resultado de una consulta en SQL SERVER
2000 ?

Necesito el equivalente a:

En VFP : SELECT * FROM TABLA WHERE RECNO = 15
En ORACLE : SELECT * FROM TABLA WHERE ROWNUM = 15

Como se hace en SQL Server 2000 ? No me sirve utilizar el
TOP porque la tabla tiene muchos registros.

Preguntas similare

Leer las respuestas

#6 Javier Loria
06/11/2003 - 19:31 | Informe spam
Hola Ronald:
No se si te sirve pero cuando necesito "paginacion" la construyo asi:
/* Paginacion de Autores */
CREATE PROCEDURE Autores_Sel
@LastNombre varchar(40) = NULL OUTPUT
AS
SET NOCOUNT ON

SELECT TOP 5 WITH TIES *
FROM AUTHORS
WHERE CASE WHEN @LastNombre IS NULL THEN 1
WHEN @LastNombre<au_fname THEN 1
ELSE 0
END=1
ORDER BY AU_FNAME
SELECT @LastNombre=MAX(AU_FNAME)
FROM ( SELECT TOP 5 au_fname
FROM AUTHORS
WHERE CASE WHEN @LastNombre IS NULL THEN 1
WHEN @LastNombre<au_fname THEN 1
ELSE 0
END=1
ORDER BY AU_FNAME) AS N
GO
/* Fin de Declaracion de Procedimiento */

/* Uso de Procedimiento */
DECLARE @UltimoApellido varchar(40)

EXEC Autores_Sel @UltimoApellido OUTPUT
EXEC Autores_Sel @UltimoApellido OUTPUT
EXEC Autores_Sel @UltimoApellido OUTPUT
EXEC Autores_Sel @UltimoApellido OUTPUT
EXEC Autores_Sel @UltimoApellido OUTPUT
/* Fin de Procedimiento */

Esto te permitira en la aplicacion cliente pedir bloques de filas
"consecutivos", usando el filtro y la siguiente corrida obtiene los
siguientes.

Espero te sirva,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Ronald Espinosa escribio:
El problema sería que si el resultado del select devuelve
muchos registros y solo necesito el último sería bastante
demorado.

La situación es la siguiente, de un select que recibo como
parámetro debo devolver bloques de 10 registros con un
rango específico determinado por otro parámetro, por
ejemplo desde el 500 al 510.

Cual sería la forma adecuada de hacerlo ?
Respuesta Responder a este mensaje
#7 Fernando G. Guerrero
06/11/2003 - 20:31 | Informe spam
Supongo que sabes que puedes crear índices en orden descendente en SQL
Server 2000, lo cual aceleraría este tipo de TOP que quieres ejecutar.

Fernando G. Guerrero
SQL Server MVP
CEO & Principal Mentor
Solid Quality Learning
www.solidqualitylearning.com

"Comparte lo que sabes, aprende lo que no sepas"

"Ronald Espinosa" wrote in message
news:004f01c3a48c$4ce26cf0$
El problema sería que si el resultado del select devuelve
muchos registros y solo necesito el último sería bastante
demorado.

La situación es la siguiente, de un select que recibo como
parámetro debo devolver bloques de 10 registros con un
rango específico determinado por otro parámetro, por
ejemplo desde el 500 al 510.

Cual sería la forma adecuada de hacerlo ?
Respuesta Responder a este mensaje
#8 Accotto Maximiliano D.
06/11/2003 - 22:17 | Informe spam
el control ADO tiene una propiedad que le podes indicar le maximo de
registro q queres q retorne una consulta!!

esa propiedad se llama Maxrecords ahi le puedes indicar el tamaño de
registros de retorno!!
no se si esto es lo q buscas y si te ayuda.

un abrazo

Accotto Maximiliano Damian
"Ronald Espinosa" escribió en el mensaje
news:030001c3a4aa$13fe89f0$
Antes que nada, gracias por tu interés en ayudarme.

El motivo de hacer esto es debido a un aplicativo para
internet hecho en java que se encarga de enviarme una
sentencia SELECT y el rango o bloque de registros que debo
enviarle del resultado del select, esto lo hago mediante
un web service que accesa el SQL Server 2000 con ADO.

El resultado del select podría tener miles de registros,
por lo tanto el interés de devolver el bloque determinado
de 10 registros.
Respuesta Responder a este mensaje
#9 Patrick Espinosa
06/11/2003 - 22:29 | Informe spam
Ronald, si estás utilizando ADO por qué no usas las propiedades
PageSize y AbsolutePage del objecto recordset? Podrías dividirlo
en páginas de tamaño 10 y luego posicionarte en la página 50
así obtendrías sólo los registros del 500 al 510

Saludos.
Patrick Espinosa.

"Ronald Espinosa" escribió en el mensaje
news:006201c3a482$e411a050$
Alguien sabe como puedo obtener determinado número de
registro en el resultado de una consulta en SQL SERVER
2000 ?

Necesito el equivalente a:

En VFP : SELECT * FROM TABLA WHERE RECNO = 15
En ORACLE : SELECT * FROM TABLA WHERE ROWNUM = 15

Como se hace en SQL Server 2000 ? No me sirve utilizar el
TOP porque la tabla tiene muchos registros.
Respuesta Responder a este mensaje
#10 Ronald Espinosa
07/11/2003 - 00:29 | Informe spam
Si utilizo la propiedad MaxRecords de ADO es lo mismo que
si utilizo el SELECT TOP #, y es posible que el resultado
de miles de registros, de los cuales solo necesito tomar
un rango, ejemplo desde 120 a 130.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida