Created
October 8, 2012 17:27
-
-
Save luisrudge/3853754 to your computer and use it in GitHub Desktop.
exemplo de paginação
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--tamanho da página | |
DECLARE @PageSize INT | |
SET @PageSize = 25 | |
--Índice da página (começa em 1) | |
DECLARE @Page INT | |
SET @Page = 4 | |
--Índice do primeiro registro a ser exibido (não precisa ser um parâmetro, pode ser calculado internamente) | |
DECLARE @PageStartIndex INT | |
SET @PageStartIndex = ((@Page - 1) * @PageSize); --qual o primeiro registro da página | |
--aqui é feito todo o filtro | |
--O ideal é que somente os campos necessários para fazer joins com outras tabelas sejam trazidos aqui (junto com o ROW_NUMBER) | |
WITH RowFilter | |
AS | |
( | |
SELECT | |
[rowNumber] = ROW_NUMBER() OVER (ORDER BY i.itoStartDate) --ordenação interna da paginação | |
,[id]=i.idItemOrder | |
FROM tbItemOrder i | |
WHERE idcampaign = 'mcprl' | |
AND idproduct = 2289 | |
) | |
--Aqui sim, os dados reais são coletados utilizando os campos da CTE RowFilter para fazer join com as tabelas necessárias | |
SELECT idCampaign, idOrder, itoName | |
FROM RowFilter f | |
INNER JOIN tbItemOrder i | |
ON f.id = i.iditemorder | |
WHERE f.rowNumber BETWEEN @PageStartIndex + 1 AND @PageStartIndex + @PageSize --Aqui é feita a paginação de fato | |
--Normalmente, é interessante ter um select trazendo a contagem total de pedidos (mesmo só exibindo uma parte deles | |
SELECT COUNT(1) FROM tbItemOrder i WHERE idcampaign = 'mcprl' AND idproduct = 2289 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment