Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Realizar Paginacion en Stored Procedures

183 views
Skip to first unread message

Juan Pablo Fuentes Rdz

unread,
Apr 2, 2004, 3:31:19 PM4/2/04
to
Hola
 
Alguien de ustedes ha escrito en un Stored Procedure la funcionalidad de la Paginación ?
 
He revisado algunos articulos en la Red en los siguientes links:
 
 
Sin embargo hacen uso de la creacion de una tabla Temporal, y no se si es lo mas adecuado para realizar este proceso.
 
He consultado la pagina :
 
 
en la que se realiza una paginación para sql server y es en esta en la que me he basado para generar mi consulta sql.
 
Actualmente implemento una consulta de este tipo para realizar la paginacion:
 
SELECT  ClaEmp ,  FolioAlumno ,  NomAlumno ,  Nacionalidad ,  BajaLogicaSiNo FROM (SELECT TOP 45 ClaEmp ,  FolioAlumno ,  NomAlumno ,  Nacionalidad ,  BajaLogicaSiNo  FROM ( SELECT TOP 45 ClaEmp ,  FolioAlumno ,  NomAlumno ,  Nacionalidad ,  BajaLogicaSiNo   FROM viLstAlumGenActivos  WHERE (ClaEmp ='1') And (NomAlumno Like '%') And (BajaLogicaSiNo ='0') ORDER BY NomAlumno ASC ) viLstAlumGenActivos ORDER BY NomAlumno DESC ) viLstAlumGenActivos   ORDER BY NomAlumno ASC
 
Sin embargo el Tamaño de Pagina que establezco en el TOP, es un valor que debe ser proporcionado como parametro en el SP, entonces mi consulta cambia ahora de esta forma:
 
DECLARE @PageSize int
SET @PageSize = 15
 
SELECT  ClaEmp ,  FolioAlumno ,  NomAlumno ,  Nacionalidad ,  BajaLogicaSiNo FROM (SELECT TOP @PageSize ClaEmp ,  FolioAlumno ,  NomAlumno ,  Nacionalidad ,  BajaLogicaSiNo  FROM ( SELECT TOP @PageSize ClaEmp ,  FolioAlumno ,  NomAlumno ,  Nacionalidad ,  BajaLogicaSiNo   FROM viLstAlumGenActivos  WHERE (ClaEmp ='1') And (NomAlumno Like '%') And (BajaLogicaSiNo ='0') ORDER BY NomAlumno ASC ) viLstAlumGenActivos ORDER BY NomAlumno DESC ) viLstAlumGenActivos   ORDER BY NomAlumno ASC
 
Pero al correr el script me genera un error y es por el @PageSize, he estado buscando otras alternativas para solucionar esto y aun no consigo tener exito, alguien de ustedes me pudiera sugerir algún tip para lograr esta funcionalidad u otra forma de lograr la paginación ?
 
Saludos!!
Thanks in advance.
JPablo Fuentes.

Gustavo Larriera [MVP SQL]

unread,
Apr 2, 2004, 4:30:11 PM4/2/04
to
Hola Juan Pablo,
 
lamentablemente en esta versión de SQL no es posible poner TOP <expresionNumerica>, debe ser una contante numérica.
 
Lo que puedes hacer es armar una SQL dinámica. Concatena en una variable string los pedacitos de tu SELECT, concatenando el valor de la variable @PageSize. Luego ejecuta el string final (que en vez de la variable @PageSize, tendrá el propio valor de la variable) usando la función EXECUTE.
 
saludos
gux
 

--
Gustavo Larriera, MVP-SQL, MCSE
Uruguay LatAm
 
Books Online (BOL) de SQL Server disponibles en:
http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
---
Este mensaje se proporciona "como está" sin garantías de ninguna clase, y no otorga ningún derecho.
---
"Juan Pablo Fuentes Rdz" <jfue...@fortia.com.mx> wrote in message news:%23dRJqFP...@TK2MSFTNGP12.phx.gbl...

Juan Pablo Fuentes Rdz

unread,
Apr 2, 2004, 5:00:33 PM4/2/04
to
Hola, gracias por tu comentario, y ya he realizado tu sugerencia pero tengo una duda mas, disculpa mi ignorancia, mi Stored Quedo asi:
 
 
CREATE PROCEDURE [dbo].[spPagination]
AS
DECLARE @PageSize INT,
                    @MySQL AS VARCHAR(1024)
SET @PageSize = 15
SET @MySQL = 'SELECT TOP ' + RTRIM(CAST(@PageSize AS CHAR)) + ' ClaEmp, FolioAlumno ,  NomAlumno ,  Nacionalidad ,  BajaLogicaSiNo from viLstAlumGenActivos'
SELECT @MySQL
GO
 
Pero ahora como ejecuto la Instruccion sql ?'
 
 
"Gustavo Larriera [MVP SQL]" <gux@_REMOVETHIS_mvps.org> escribió en el mensaje news:usg$tmPGEH...@TK2MSFTNGP09.phx.gbl...

ulises

unread,
Apr 2, 2004, 5:24:41 PM4/2/04
to
Puedes usar

SET ROWCOUNT @numero
---- tu sentencia
SET ROWCOUNT 0

para implementar tu solución, revisa la sintaxis y los "peros" del
ROWCOUNT en el BOL.

Saludos,
Ulises

Cesar Ochica

unread,
Apr 3, 2004, 8:18:13 AM4/3/04
to
Observa el la funcion EXECUTE
Execute (@Mysql)
 
Espero te sirva, saludos
0 new messages