Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Paginación con store procedure... ¿dónde se lleva a cabo?

Estas en el tema de Paginación con store procedure... ¿dónde se lleva a cabo? en el foro de SQL Server en Foros del Web. Hola a todos. Estos últimos días he estado tratando de comprender algunos conceptos que no he terminado de entender... Tengo que administrar una aplicación tipo ...
  #1 (permalink)  
Antiguo 03/12/2010, 09:49
Avatar de JavierMMM  
Fecha de Ingreso: agosto-2008
Ubicación: Justito frente a la computadora.
Mensajes: 278
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Paginación con store procedure... ¿dónde se lleva a cabo?

Hola a todos. Estos últimos días he estado tratando de comprender algunos conceptos que no he terminado de entender...

Tengo que administrar una aplicación tipo bandeja de entrada, dónde se muestran los mensajes almacenados en un sistema. Cada usuario tiene un x número de mensajes almacenados en el server. Se trabaja con sql server 2000 y asp clásico y al momento de hacer la consulta, se muestran todos los registros en un mismo momento y esto se alenta cuando se tienen muchos mensajes.

Leyendo me he encontrado con un término de "paginación" en sql. La paginación la he trabajado cuando ya tengo cargados todos los datos al ejecutar mi consulta, pero se me ha ocurrido que, con los conceptos que he leído entre ayer y hoy, es paginar la consulta, para poder ir consultando de 10 en 10 registros. ¿Es esto posible? Y en caso de serlo, ¿cómo puedo crear esto?

Gracias de antemano.
__________________
__________________________________________________ ___________________________________
Las cosas más reales sólo suceden en la imaginación... Sólo recordamos, lo que nunca sucedió.
  #2 (permalink)  
Antiguo 03/12/2010, 17:12
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Paginación con store procedure... ¿dónde se lleva a cabo?

Buenas tardes JavierMMM:

Tal como comentas, la idea de la paginación es traer sólo una porción de información en lugar de todos los registros. Aquí la cuestión es de cómo tienes organizados tus datos.

Para poder páginar necesitas tener numerados tus registros, de tal manera que siempre tengas algo como esto

Tabla
NoRegistro|Dato
1|Ejemplo
2|Dos
3|Paginación
4|Lo que sea
5|Algo más

De tal manera que tus consultas puedan ser así

Select * from Tabla where NoRegistro between 2 and 20

el problema es si no tienes los registros numerados, si es así deberás hacer uso de funciones como Row_number(). En el foro se ha tratado muchas veces este tema, sería cuestión de que utilizaras la herramienta de búsqueda para encontrar algo de información.

Por lo pronto te dejo una página que creo que te puede servir

http://www.forosdelweb.com/f87/pagin...server-538141/

Saludos
  #3 (permalink)  
Antiguo 03/12/2010, 17:36
Avatar de JavierMMM  
Fecha de Ingreso: agosto-2008
Ubicación: Justito frente a la computadora.
Mensajes: 278
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Paginación con store procedure... ¿dónde se lleva a cabo?

Hola leonardo_josue, gracias por responder a mi duda.....

La ventaja es que sí, tengo todos mis registros con un id autonumérico, así que por ese lado no hay problema. Lo malo es que Row_number() no está soportado por sql server 2000 (según lo que he leído porque antes no me lo reconocía).

Pero he hecho algo parecido al Limit de MySql, con Top, y me ha quedado algo como esto:

Código:
SELECT * 
FROM MI_TABLA 
WHERE idMensaje NOT IN (SELECT TOP tot_reg idMensaje FROM MI_TABLA ORDER BY fecha desc) and idUsuarioA = xxxxx And activo = x and idMensaje Between n1 and n2
ORDER BY fecha desc
y bueno, me funciona. Ahora voy a implementarlo y seguir tratando de modificarlo.

Excelente día
__________________
__________________________________________________ ___________________________________
Las cosas más reales sólo suceden en la imaginación... Sólo recordamos, lo que nunca sucedió.
  #4 (permalink)  
Antiguo 07/12/2010, 18:00
Avatar de JavierMMM  
Fecha de Ingreso: agosto-2008
Ubicación: Justito frente a la computadora.
Mensajes: 278
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Paginación con store procedure... ¿dónde se lleva a cabo?

De nuevo yo.... pues resulta que no estba tan del todo sencillo como creía, ya que como lo comentó @leonardo_josue,
Cita:
el problema es si no tienes los registros numerados, si es así deberás hacer uso de funciones como Row_number()
y en mi caso, como se lo comenté, tengo con autonumérico los id´s de los mensajes, pero puede que un usuario tenga 10 mensajes, pero no necesariamente los id´s son consecutivos.

Lo que sucede es que uso sql server 2000, y no he podido usar esa función Row_number(), y según he leído ni podré porque no existe en esa versión de sql....

¿Alguna manera de poder hacerlo?
__________________
__________________________________________________ ___________________________________
Las cosas más reales sólo suceden en la imaginación... Sólo recordamos, lo que nunca sucedió.
  #5 (permalink)  
Antiguo 07/12/2010, 20:22
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Paginación con store procedure... ¿dónde se lleva a cabo?

Veamos, si el concepto es devolver un cierto numero de registros a tu "cliente" que no esten tomados por otro "cliente" (me suena a tipo operadores), entonces ya lo hemos tratado aca y se hace mediante un campo tipo bandera (tal vez con el numero del id del que toma los registros). Creo que por este lado, no debe haber duda.

Paginar:
Código SQL:
Ver original
  1. CREATE PROCEDURE #Paginacion
  2. @Apellido VARCHAR(40) = NULL OUTPUT, @Nombre VARCHAR(40) = NULL OUTPUT
  3. AS
  4. SET NOCOUNT ON
  5.  
  6. -- Seleccione las proximas 5 filas
  7. SELECT TOP 2 WITH TIES *
  8. FROM #test
  9. WHERE CASE WHEN @Apellido IS NULL THEN 1
  10. WHEN @Apellido + @Nombre < apellido + nombre THEN 1 ELSE 0 END=1
  11. ORDER BY apellido, nombre
  12.  
  13. -- Seleccione el siguiente apellido
  14. SELECT @Apellido = MAX(apellido),
  15. @Nombre = MAX(nombre)
  16. FROM ( SELECT TOP 2 apellido, nombre
  17. FROM #test
  18. WHERE CASE WHEN @Apellido IS NULL THEN 1
  19. WHEN @Apellido + @Nombre < apellido + nombre THEN 1 ELSE 0 END=1
  20. ORDER BY apellido, nombre) AS N
  21. GO
  22. /* Fin de Declaracion de Procedimiento */
  23.  
  24. /* Uso de Procedimiento */
  25. DECLARE @UltimoApellido VARCHAR(40), @UltimoNombre VARCHAR (40)
  26.  
  27. EXEC #Paginacion @UltimoApellido OUTPUT, @UltimoNombre OUTPUT
  28. EXEC #Paginacion @UltimoApellido OUTPUT, @UltimoNombre OUTPUT
  29. EXEC #Paginacion @UltimoApellido OUTPUT, @UltimoNombre OUTPUT
  30. /* Fin de Procedimiento */

A este query, solo le hace falta agregar en el filtro del WHERE, aquellos que esten "libres", que no esten tomados por otro "cliente".
__________________
MCTS Isaias Islas

Etiquetas: procedure, store
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:55.