SELECT TOP

09/07/2004 - 13:07 por David R. | Informe spam
Hola a todos,

Estoy con un procedimiento de busqueda y quiero que me
devuelva un rango de los resultados.
Si la SELECT de busqueda encuentra 100 registros, quiero
que me muestre del 20 al 50.

Con SELECT TOP 50 me muestra los 50 primeros, pero ¿como
hacer para sacar solo del 20 al 50?

La idea es hacer una paginacion, pasando al procedimiento
la primera posicion y la ultima.

Trabajo con SQL 2000 Enterprice y W2003


Muchas gracias!!

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
09/07/2004 - 13:29 | Informe spam
Suponiendo que el número de registros por página es de 50, para pasar a
la siguiente página:

SELECT TOP 50 campo1, campo2... FROM tabla WHERE campoClave >
@valorAPartirDe ORDER BY campoClave

Para pasar a la anterior página:

SELECT TOP 50 campo1, campo2... FROM tabla WHERE campoClave <
@valorAPartirDe ORDER BY campoClave


Un saludo

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

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"David R." escribió en el mensaje
news:29ca301c465a4$eeb5f2c0$
Hola a todos,

Estoy con un procedimiento de busqueda y quiero que me
devuelva un rango de los resultados.
Si la SELECT de busqueda encuentra 100 registros, quiero
que me muestre del 20 al 50.

Con SELECT TOP 50 me muestra los 50 primeros, pero ¿como
hacer para sacar solo del 20 al 50?

La idea es hacer una paginacion, pasando al procedimiento
la primera posicion y la ultima.

Trabajo con SQL 2000 Enterprice y W2003


Muchas gracias!!
Respuesta Responder a este mensaje
#2 Javier Loria
09/07/2004 - 17:15 | Informe spam
Hola:
La solucion de Carlos es correcta pero no es paramatrizable,
adicionalmente en conjuntos grandes de datos (que son los mas propensos a
requerir esta tecnica) es muy lenta. Esta es la razon por la que inventaron
los cursores :(
Quedan varias alternativas:
a) Columna Identity: Y usar las filas como registros en un arreglo, con
el riesgo de que queden "huecos".
b) Usar un cursor: Hacer un FECTH ABSOLUTE, y FECHT de los restantes.
c) Cambiar de Modelo Mental: Aceptar que en SQL los conjuntos de datos
no son ordenados y unicamente podemos filtrar basados en columnas de las
tablas.
La opcion a) requiere cambios en el esquema; deteriora ligeramente el
desempeno pero puede ayudar si la tabla tiene muchos indices; y no es
standard por lo que requiere cambios si se desea implementar en otros
motores de BD.
La opcion b) no requiere cambios en el esquema, es rapida si los datos
devueltos son pocos, y forma parte de los estandares. La desventaja
principal es que no es muy escalable y si los datos devueltos son muchos se
deteriora rapidamente.
La opcion c) es sin duda alguna la mas dificil.
Saludos,

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.

David R. escribio:
Hola a todos,

Estoy con un procedimiento de busqueda y quiero que me
devuelva un rango de los resultados.
Si la SELECT de busqueda encuentra 100 registros, quiero
que me muestre del 20 al 50.

Con SELECT TOP 50 me muestra los 50 primeros, pero ¿como
hacer para sacar solo del 20 al 50?

La idea es hacer una paginacion, pasando al procedimiento
la primera posicion y la ultima.

Trabajo con SQL 2000 Enterprice y W2003


Muchas gracias!!
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida