Skip to content

Instantly share code, notes, and snippets.

@luisrudge
Created October 8, 2012 17:27
Show Gist options
  • Save luisrudge/3853754 to your computer and use it in GitHub Desktop.
Save luisrudge/3853754 to your computer and use it in GitHub Desktop.
exemplo de paginação
--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