Uma nova função do SQL Server 2012 veio para ajudar na paginação de ResultSets.
Antes tínhamos que usar comandos como row_number, cursores, CTE, etc.
Agora vamos utilizar o comando OFFSET/FETCH
OFFSET vai determinar quantos registros devemos saltar e o FETCH quantos registros retornar.
Criando ambiente de teste:
CREATE TABLE ClientePag
(
ID int identity primary key,
Nome varchar(100)
)
GO
INSERT INTO ClientePag VALUES(NEWID())
GO 100
Vamos criar uma procedure para facilitar esta paginação:
CREATE PROCEDURE usp_Paginar
(
@Inicial INT,
@Quantidade INT
)
AS
SELECT * FROM ClientePag ORDER BY ID
OFFSET ((@Inicial - 1) * @Quantidade) ROWS
FETCH NEXT @Quantidade ROWS ONLY
GO
Vamos testar a procedure:
exec usp_Paginar 1,4
exec usp_Paginar 2,4
exec usp_Paginar 3,4
exec usp_Paginar 4,4
Agora basta implementar isso na sua aplicação.