Select top

27/04/2005 - 11:46 por Jose L. | Informe spam
Hola, tengo un problemilla con el select top en las consultas sobre sqlserver.

Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo que
paginarlos de 5 en 5, con lo que ejecuto la query con select top 5..., select
top 10... y select top 15..., todas ellas con un order by por una determinada
columna, para despues rellenar un array con los registros que me interesan.

Pues bien, resulta que el orden de los registros no es el mismo en las 3
consultas, con lo que en la paginación no veo todos los datos correctamente.

alguien sabe que me puede estar pasando?, alguna sugerencia?

Segun he leido en los BOL de sqlserver, el top con un order by, primero
ordena y despues obtiene los registros indicados, pero parece ser que no lo
está haciendo bien. Alguna idea?

Gracias por anticipado
 

Leer las respuestas

#1 Carlos Sacristán
27/04/2005 - 12:17 | Informe spam
Si las condiciones son las mismas y el conjunto de datos no ha cambiado,
el orden debería seguir siendo el mismo. Efectivamente para poder sacar los
n primeros registros de un conjunto primero hay que ordenarlos para saber
qué significa exactamente "primeros". Dinos exactamente qué es lo que te
parece que el gestor esté haciendo mal y te podremos ayudar mejor.

Otra cosa, para paginar no es necesario ir aumentando el número de
registros a mostrar, sino que lo que variará será el registro a partir del
cual mostrar. Es decir, si la primera vez que le mostraste los 5 primeros
registros al usuario, el último de ellos tenía como valor de la PK un 5 (por
ejemplo), la sentencia que tendrás que formar será algo similar a la
siguiente:

SELECT TOP 5 campo1, campo2, campo...
FROM tuTabla
WHERE campoPK > 5


Un saludo

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

"Jose L." (donotspam)> escribió en el mensaje
news:
Hola, tengo un problemilla con el select top en las consultas sobre


sqlserver.

Tengo una tabla con 15 registros, pero para mostrarlos al usuario, tengo


que
paginarlos de 5 en 5, con lo que ejecuto la query con select top 5...,


select
top 10... y select top 15..., todas ellas con un order by por una


determinada
columna, para despues rellenar un array con los registros que me


interesan.

Pues bien, resulta que el orden de los registros no es el mismo en las 3
consultas, con lo que en la paginación no veo todos los datos


correctamente.

alguien sabe que me puede estar pasando?, alguna sugerencia?

Segun he leido en los BOL de sqlserver, el top con un order by, primero
ordena y despues obtiene los registros indicados, pero parece ser que no


lo
está haciendo bien. Alguna idea?

Gracias por anticipado

Preguntas similares