Consulta SQL Server por bloques

01/12/2003 - 21:29 por Sergio Gallardo Contreras | Informe spam
Quisiera que una consulta me regresara la información segmentada, por
ejemplo, que devolviera primero las 10 primeras filas de la consulta, luego
las siguientes 10, etc. para un motor de búsqueda tipo Google, Yahoo, etc.
Lo puedo hacer a nivel de recordset, pero quisiera que el servidor de base
de datos fuera el que hiciera el trabajo. Gracias.

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
01/12/2003 - 21:42 | Informe spam
Hola:

Eso debes controlarlo tu mendiante una condición WHERE.

Yo suelo hacerlo combinando la clausula TOP y la condición WHERE, siempre
que en tu tabla tengas una Primary Key. Te paso un ejemplo sobre Northwind:

DECLARE @PK VARCHAR(5)
SELECT @PK = 'ALFKI'
SELECT TOP 10 * FROM Customers
WHERE CustomerID > @PK
SELECT @PK = 'BSBEV'
SELECT TOP 10 * FROM Customers
WHERE CustomerID > @PK

Esto lo puedes hacer también en un procedimiento almacenado que reciba el
último valor mostrado, y te devuelva los 10 siguientes.


Un saludo
Salvador Ramos
Murcia - España

No puedes conseguir software rápidamente disminuyendo su calidad.
En cambio, si que lo consigues aumentando la calidad.

www.helpdna.net (información sobre Windows DNA, SQL Server, VB, ...)


Microsoft MVP SQL Server
MCP SQL Server
PASS Spanish Group (www.sqlpass.org)


"Sergio Gallardo Contreras" escribió en el
mensaje news:
Quisiera que una consulta me regresara la información segmentada, por
ejemplo, que devolviera primero las 10 primeras filas de la consulta,


luego
las siguientes 10, etc. para un motor de búsqueda tipo Google, Yahoo, etc.
Lo puedo hacer a nivel de recordset, pero quisiera que el servidor de base
de datos fuera el que hiciera el trabajo. Gracias.


Respuesta Responder a este mensaje
#2 ulises
01/12/2003 - 22:16 | Informe spam
Revisa
http://rosca.net/writing/articles/s...aging.asp.

Saludos,
Ulises

Quisiera que una consulta me regresara la información


segmentada, por
ejemplo, que devolviera primero las 10 primeras filas de


la consulta, luego
las siguientes 10, etc. para un motor de búsqueda tipo


Google, Yahoo, etc.
Lo puedo hacer a nivel de recordset, pero quisiera que el


servidor de base
de datos fuera el que hiciera el trabajo. Gracias.
Respuesta Responder a este mensaje
#3 ulises
01/12/2003 - 22:26 | Informe spam
Revisa

http://support.microsoft.com/defaul...cid=kb;en-
us;829142
http://rosca.net/writing/articles/s...paging.asp

Saludos,
Ulises

Quisiera que una consulta me regresara la información


segmentada, por
ejemplo, que devolviera primero las 10 primeras filas de


la consulta, luego
las siguientes 10, etc. para un motor de búsqueda tipo


Google, Yahoo, etc.
Lo puedo hacer a nivel de recordset, pero quisiera que el


servidor de base
de datos fuera el que hiciera el trabajo. Gracias.


.

Respuesta Responder a este mensaje
#4 Javier Loria
02/12/2003 - 04:55 | Informe spam
Hola:
A mi me gusta:
A mi me gusta utilizar el siguiente mecanismo:
/* 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.

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.
Sergio Gallardo Contreras escribio:
Quisiera que una consulta me regresara la información segmentada, por
ejemplo, que devolviera primero las 10 primeras filas de la consulta,
luego las siguientes 10, etc. para un motor de búsqueda tipo Google,
Yahoo, etc. Lo puedo hacer a nivel de recordset, pero quisiera que el
servidor de base de datos fuera el que hiciera el trabajo. Gracias.
Respuesta Responder a este mensaje
#5 Miguel Egea
02/12/2003 - 10:05 | Informe spam
jeje, en portalsql.com le recomendé este mecanísmo basandome en tu idea. Si
no te parece mal voy a publicar un ejemplo en portalsql.com :-D


Saludos

Miguel Egea
Microsoft SQL-SERVER MVP
Brigada Anti-Cursores
"Javier Loria" escribió en el mensaje
news:#
Hola:
A mi me gusta:
A mi me gusta utilizar el siguiente mecanismo:
/* 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.

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.
Sergio Gallardo Contreras escribio:
> Quisiera que una consulta me regresara la información segmentada, por
> ejemplo, que devolviera primero las 10 primeras filas de la consulta,
> luego las siguientes 10, etc. para un motor de búsqueda tipo Google,
> Yahoo, etc. Lo puedo hacer a nivel de recordset, pero quisiera que el
> servidor de base de datos fuera el que hiciera el trabajo. Gracias.


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida