Com essas duas novas funcionalidades, podemos facilmente criar paginação de dados no SQL Sever 2012. O recurso OFFSET serve para definirmos a quantidade de linhas que iremos ignorar, e o FETCH informarmos quantos registros iremos retornar.
Para exemplificar utilizaremos o banco AdventureWorks, faremos um select simples, apenas para confirmar a existência dos dados na base:
USE AdventureWorks2008R2 SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate FROM Sales.Store
Após a confirmar que existem dados na base, iremos apenas complementar o select utilizado acima com um Order BY que somos obrigados a utilizar, e com os comandos OFFSET e FETCH.
USE AdventureWorks2008R2 SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate FROM Sales.Store ORDER BY BusinessEntityID OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY
Neste exemplo, estamos retornando os três primeiros registros da tabela, como definimos zero no comando OFFSET, significa que nenhuma linha está sendo ignorada e no comando FETCH NEXT estamos retornando três registros.
Agora no comando abaixo iremos, ignorar os vinte primeiros registros e retornaremos os dez próximos.
USE AdventureWorks2008R2 SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate FROM Sales.Store ORDER BY BusinessEntityID OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY

Agora, com pouco código e com muita facilidade criaremos uma procedure para fazer a paginação .
CREATE PROCEDURE up_paginacao ( @NumPagina INT, @QtdRegistroPagina INT ) AS SELECT BusinessEntityID, Name, SalesPersonID, ModifiedDate FROM Sales.Store ORDER BY BusinessEntityID OFFSET (@NumPagina - 1) * @QtdRegistroPagina ROWS FETCH NEXT @QtdRegistroPagina ROWS ONLY
Depois de compilar a procedure, vamos testar a execução da mesma:
EXECUTE up_paginacao 5,10
Com o retorno dos dados, agora podemos entender o que aconteceu. Foi solicitada a página 5 e 10 registros por página, então o comando OFFSET recebe o valor (5-1) * 10, ou seja, o valor 40 que significa que estamos ignorando os quarenta primeiros registros e estamos definindo no comando FETCH que iremos retornar 10 registros.
Simples assim…fui







