Problema com paginaçao

03/11/2006 - 22:43 por alecarnero | Informe spam
Tengo un problema con esta sp para paginar , funciona cuando pagina
ordenando por codigo, pero no se que tengo que modificar cuando quiero que
pagine ordenando por descricao, muchas gracias desde ya por cualquier ayuda

Alejandro Santos


SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER PROCEDURE PROC_PAGINA(@TABELA VARCHAR(50) = '',@CAMPOS VARCHAR(150) '' , @QTDPAGINA INT = 0 , @PAGINA INT = 0 )
AS

DECLARE @TOTAL INT
DECLARE @codigo numeric
DECLARE @referencia VARCHAR(14)
DECLARE @descricao VARCHAR(50)

DECLARE @COMANDO VARCHAR(200)

DECLARE @DADOS INT
DECLARE @INICIO INT

SET NOCOUNT ON

IF @TABELA <> '' AND @QTDPAGINA <> 0 AND @PAGINA <> 0
BEGIN
CREATE TABLE #TEMP
(
codigo numeric,
referencia VARCHAR(14),
descricao VARCHAR(50)
)
SET @COMANDO = 'DECLARE CUR_MEU CURSOR FAST_FORWARD FOR SELECT ' +
@CAMPOS + ' FROM ' +@TABELA + ' order by descricao'
EXECUTE(@COMANDO)
OPEN CUR_MEU

FETCH NEXT FROM CUR_MEU
INTO
@Codigo,
@referencia,
@descricao

SET @INICIO = 0
SET @DADOS = 0


WHILE @@FETCH_STATUS = 0
BEGIN
IF @INICIO >= ( @PAGINA * @QTDPAGINA ) - @QTDPAGINA
BEGIN
INSERT INTO #TEMP VALUES(@codigo,@referencia,@descricao)
SET @DADOS = @DADOS + 1
IF @DADOS >= @QTDPAGINA
BEGIN
BREAK
END
END
SET @INICIO = @INICIO + 1
FETCH NEXT FROM CUR_MEU
INTO @codigo,@referencia,@descricao
END
CLOSE CUR_MEU
DEALLOCATE CUR_MEU
SELECT codigo,referencia,descricao FROM #TEMP
DROP TABLE #TEMP
END

SET NOCOUNT OFF


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
 

Leer las respuestas

#1 Maxi
05/11/2006 - 17:15 | Informe spam
Hola, no se que version de SQL estas usando pero te paso primero un articulo
del maestro de Javier loria para paginar en 2000 y tambien un ejemplo de
como paginar en 2005. Tu query no la analice en profundidad pero lo que vi
es que estas entre otras cosas usando SQL-dinamico (EXEC()) y no es una
buena idea que digamos, fijate si con estos ejemplos que te paso te pueden
ayudar a repensar tu problema:

http://www.configuracionesintegrale...articulo%5

declare @pageNum int,
@RowsPerPage int

set @pageNum = 2
Set @RowsPerPage = 20

select * from
(
SELECT row_number() over (order by CustomerID) as rownum,
Sales.SalesOrderHeader.* FROM Sales.SalesOrderHeader
) as p
where rownum between
(@pageNum - 1)*@RowsPerPage + 1
and @pageNum*@RowsPerPage



-

CREATE FUNCTION dbo.fn_GetTopOrders(@custid AS int, @n AS INT)
RETURNS TABLE
AS
RETURN
SELECT TOP(@n) *
FROM Sales.SalesOrderHeader
WHERE CustomerID = @custid
ORDER BY TotalDue DESC
GO

declare @pageNum int,
@RowsPerPage int

set @pageNum = 4
Set @RowsPerPage = 20;

WITH CTE as
(
SELECT C.CustomerID,
O.TotalDue,
rank() over (partition by C.CustomerID order by TotalDue) as rankOfSale
FROM
AdventureWorks.Sales.Customer AS C
CROSS APPLY
AdventureWorks.dbo.fn_GetTopOrders(C.CustomerID, 3) AS O
)
Select * from
(
SELECT row_number() over (order by CustomerID) as rownum,
CustomerID,
[1] as Rank1,
[2] as Rank2,
[3] as Rank3
from
CTE
pivot(
sum(TotalDue) for rankOfSale in ([1],[2],[3])
) as pvt
) as P
where rownum between
(@pageNum - 1)*@RowsPerPage + 1
and @pageNum*@RowsPerPage




=

Saludos

[Microsoft MVP SQL Server]
www.sqlgurus.org
Buenos Aires - Argentina
"alecarnero" wrote in message
news:%23TTTWE5$
Tengo un problema con esta sp para paginar , funciona cuando pagina
ordenando por codigo, pero no se que tengo que modificar cuando quiero que
pagine ordenando por descricao, muchas gracias desde ya por cualquier
ayuda

Alejandro Santos


SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER PROCEDURE PROC_PAGINA(@TABELA VARCHAR(50) = '',@CAMPOS VARCHAR(150)
> '' , @QTDPAGINA INT = 0 , @PAGINA INT = 0 )
AS

DECLARE @TOTAL INT
DECLARE @codigo numeric
DECLARE @referencia VARCHAR(14)
DECLARE @descricao VARCHAR(50)

DECLARE @COMANDO VARCHAR(200)

DECLARE @DADOS INT
DECLARE @INICIO INT

SET NOCOUNT ON

IF @TABELA <> '' AND @QTDPAGINA <> 0 AND @PAGINA <> 0
BEGIN
CREATE TABLE #TEMP
(
codigo numeric,
referencia VARCHAR(14),
descricao VARCHAR(50)
)
SET @COMANDO = 'DECLARE CUR_MEU CURSOR FAST_FORWARD FOR SELECT ' +
@CAMPOS + ' FROM ' +@TABELA + ' order by descricao'
EXECUTE(@COMANDO)
OPEN CUR_MEU

FETCH NEXT FROM CUR_MEU
INTO
@Codigo,
@referencia,
@descricao

SET @INICIO = 0
SET @DADOS = 0


WHILE @@FETCH_STATUS = 0
BEGIN
IF @INICIO >= ( @PAGINA * @QTDPAGINA ) - @QTDPAGINA
BEGIN
INSERT INTO #TEMP VALUES(@codigo,@referencia,@descricao)
SET @DADOS = @DADOS + 1
IF @DADOS >= @QTDPAGINA
BEGIN
BREAK
END
END
SET @INICIO = @INICIO + 1
FETCH NEXT FROM CUR_MEU
INTO @codigo,@referencia,@descricao
END
CLOSE CUR_MEU
DEALLOCATE CUR_MEU
SELECT codigo,referencia,descricao FROM #TEMP
DROP TABLE #TEMP
END

SET NOCOUNT OFF


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


Preguntas similares