By: Ashish Kumar Mehta | Actualizado: 2011-04-18 | Comentários (4) | Relacionado: 1 | 2 | 3 | 4 | 5 | More > Paging

Problem

>

Apesar de analisar as novas funcionalidades do SQL Server 2012 deparei-me com uma nova funcionalidade OFFSET e FETCH. A cláusula OFFSET e FETCH do SQL Server 2012 fornece uma opção para buscar apenas uma página ou uma janela dos resultados do conjunto completo de resultados. Nesta dica vamos dar uma vista de olhos a um exemplo que usa a funcionalidade OFFSET e FETCH do SQL Server 2012. Também mostraremos como você pode implementar o SQL Server Paging ou recuperação de páginas de dados SQL usando esta nova funcionalidade.

Solution

Usando esta funcionalidade do SQL Server 2012 é possível implementar facilmente o SQL Server Paging enquanto exibe os resultados para o cliente. Vamos dar uma olhada em um exemplo simples e depois também como você poderia construir um procedimento armazenado para implementar a paginação SQL.

Vamos passar por um exemplo simples que demonstra como usar a funcionalidade OFFSET e FETCH do SQL Server 2012. Pode ver abaixo que o TSQL tem o mesmo aspecto do que escreve hoje, excepto após a cláusula ORDER BY que temos os comandos OFFSET e FETCH. Uma coisa a notar é que tem de usar um ORDER BY para usar esta funcionalidade. O OFFSET basicamente diz ao SQL para saltar as primeiras 100 linhas e o FETCH irá obter as próximas 5 linhas.

USE AdventureWorks2008R2GOSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID ASC OFFSET 100 ROWS FETCH NEXT 5 ROWS ONLYGO

O snippet abaixo mostra a saída quando executa os comandos acima. Isto mostra que as primeiras 100 linhas foram descartadas e que a consulta foi buscar as próximas 5 linhas no conjunto de registos completo.

Vejamos outro exemplo onde iremos criar um procedimento armazenado que irá usar a funcionalidade OFFSET e FETCH do SQL Server 2012 para obter paginação sql enquanto mostra os resultados para as máquinas clientes. Neste procedimento armazenado estamos passando em um número de página e o número de linhas a retornar. Estes valores são então calculados para obter a página correta e o número de linhas.

USE AdventureWorks2008R2GOIF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'.') AND type in (N'P', N'PC'))DROP PROCEDURE .GOCREATE PROCEDURE ExampleUsageOfSQLServerDenaliPagingFeature ( @PageNo INT, @RowCountPerPage INT )ASSELECT BusinessEntityID ,PersonType ,FirstName + ' ' + MiddleName + ' ' + LastName FROM Person.Person ORDER BY BusinessEntityID OFFSET (@PageNo - 1) * @RowCountPerPage ROWS FETCH NEXT @RowCountPerPage ROWS ONLYGO

Vamos então executar o procedimento armazenado usando o comando abaixo. Isto nos dará cinco registros a partir da página 21 onde os registros são ordenados por BusinessEntityID.

/* Display Records Between 101 AND 105 BusinessEntityID */EXECUTE ExampleUsageOfSQLServerDenaliPagingFeature 21, 05GO

O trecho abaixo mostra a saída assim que o procedimento armazenado acima for executado com sucesso. Você pode ver que as primeiras 100 (20 páginas * 5 linhas por página = 100) linhas foram descartadas e o procedimento armazenado só foi buscado nas 5 linhas seguintes, limitando assim o número de linhas enviadas para o cliente.

Você viu nesta dica o quão facilmente você pode alcançar o SQL Server Paging usando a funcionalidade OFFSET e FETCH do SQL Server 2012. A paginação SQL não é tão difícil como costumava ser com esta nova funcionalidade.

Passos seguintes
  • Veja uma Visão Geral do Recurso do SQL Server 2012 com RESULTADOS

Última Atualização: 2011-04-18

>

>

>

>>
>

Sobre o autor
>Ashish Kumar Mehta tem contribuído para as Dicas MSSQLTips.com desde 2009 com mais de 60 dicas.
Ver todas as minhas dicas

Deixe uma resposta

O seu endereço de email não será publicado.