Olá a todos,
Começarei esse artigo com a seguinte pergunta: "Por que fazer paginação no SQL, se é tão mais fácil no Visual Studio?Mas por que????". A resposta é simples, utilizando essa forma, voce notará uma significante melhora na performance. Vamos ao código:
/* Variáveis para controle das páginas */
DECLARE @PageNumber INT;
DECLARE @PageSize INT;
DECLARE @TotalPages INT;
/* Quantas linha por página */
SET @PageSize = 15;
SET @PageNumber = 3;
IF @PageNumber = 0 BEGIN
SET @PageNumber = 1
END;
/* Usamos WITH para criar uma tabela temporária, quando os mesmos campos que queremos inserir, e mais leve do que quando utilizamos #.
* O único problema dela é que só podemos dar um SELECT nela.
*/
WITH Cadastro([NumeroLinha], [Nome], [Endereco], [Telefone], [Email])
AS (
/* A função do ROW_NUMBER() só funciona com a cláusula WITH e somente no SQL Server 2005*/
SELECT ROW_NUMBER() OVER (ORDER BY [ID] ASC) AS [NumeroLinha]
,[Nome]
,[Endereco]
,[Telefone]
,[Email]
FROM [dbo].[Cadastrados] (NOLOCK)
)
/* Executo um SELECT para me retornar a pagina e as linhas que a compõem */
SELECT [NumeroLinha], [Nome], [Endereco], [Telefone], [Email]
FROM Cadastro
WHERE [NumeroLinha] BETWEEN ( ( ( @PageNumber - 1 ) * @PageSize ) + 1 )
AND ( @PageNumber * @PageSize )
/* Obtenho o total de páginas */
SET @TotalPages = CEILING(CONVERT(NUMERIC(20,10), ISNULL((SELECT COUNT(*)
FROM [dbo].[Cadastrados] (NOLOCK)), 0)) / @PageSize)
Darei todos os créditos desse artigo a um amigo meu de trabalho, chamado Marcos Sabino Filho, ele ia chorar se eu não falasse dele nesse post, agora esta aí, agradeço muito a você por mais esse "pedaço" de conhecimento que você compartilhou comigo. O cara é tão cabeça, que não aceita a idéia de criar um blog e colocar seu conhecimento lá! Eu já disse a ele que o blog dele seria uns dos mais visitados, por que o cara sabe explicar muito bem as coisas, é impressionante!! Mais uma vez, muito obrigado, e pare de choramingar!
Posted
13 Jun 2009 13:30
by
Abdul Hade