T-SQL no SQL Server 2012 – Parte 2 – Paginação de dados

Olá pessoal,

Atualmente aplicações web fazem o uso de uma funcionalidade até então presente apenas a nível de desenvolvimento que é o recurso de realizar a paginação dos dados, ou seja, mostrar dados em tela pouco a pouco e não simplesmente retornar tudo, assim evitando problemas de performance.

Foi pensando nisso que no SQL Server 2012 foi implementado um novo recurso juntamente a clausula Order By utilizando dois recursos de nome OFFSET e FETCH.

Para iniciarmos o entendimento sobre essa funcionalidade, precisamos ter em mente dois termos que serão utilizados na clausula Order By.

  • OFFSET: Especifica o numero de linhas a ignorar antes de iniciar o retorno dos dados propostos pela consulta. Esse valor sempre deverá ser maior ou igual a 0(zero)
  • FETCH: Especifica o numero de linhas a retornar depois que a clausula OFFSET foi processada. Esse valor sempre deverá ser um inteiro constante ou uma expressão que é maior  ou igual a 1.

Bom, vamos parar com a parte teórica e vamos demonstrar a parte pratica dessa nova função.

Apenas alguns scripts de criação de base de dados e inserção de dados.

use master
go
create database DB_OrderByClause
go
use DB_OrderByClause
go
create table tblPaginacao (id int identity, nome varchar(100))
go

insert into tblPaginacao
values
(‘Registro 1’),(‘Registro 2’),(‘Registro 3’),(‘Registro 4’),(‘Registro 5’),(‘Registro 6’),
(‘Registro 7’),(‘Registro 8’),(‘Registro 9’),(‘Registro 10’),(‘Registro 11’),
(‘Registro 12’),(‘Registro 13’),(‘Registro 14’),(‘Registro 15’),(‘Registro 16’),(‘Registro 17’),(‘Registro 18’),
(‘Registro 19’),(‘Registro 20’)

  • Consulta 1

select * from tblPaginacao
order by id OFFSET 5 ROWS

OFFSET

Na primeira consulta apenas a clausula OFFSET foi especificada, ou seja, como foi falado anteriormente o OFFSET ignora o numero de linhas desejadas. No exemplo estamos realizando o OFFSET de 5 registros, então é normal que  a consulta seja retornada a partir do registro de numero 6.

  • Consulta 2

select * from tblPaginacao
order by id OFFSET 5 ROWS
FETCH NEXT 10 ROWS ONLY

FETCH

Nessa segunda consulta foi especificado a clausula OFFSET e FETCH, ou seja, de acordo com a consulta será ignorada os cinco primeiros registros e apenas irá retornar os proximos dez registros, por isso a clausula FETCH NEXT 10 ROWS ONLY.

Bom pessoal como vocês puderam ver apenas duas demonstrações basicas de como utilizar esse novo recurso no SQL Server 2012.

Espero que tenham gostado e até a proxima.

Abraços.
Marcos Freccia
[MCTS|MCITP|MCT SQL Server 2008]

Sobre Marcos Freccia

MVP em SQL Server (Data Plataform) , especialista em SQL Server, e atualmente trabalhando com Microsoft Azure!

Publicado em julho 17, 2012, em Desenvolvimento, SQL Server 2012, VirtualPass e marcado como , , , . Adicione o link aos favoritos. 5 Comentários.

  1. Essas duas funcionalidades são bens legais e úteis .. Obrigado!!!!

  2. Cara, eu gostaria muito de fazer um xingamento contra a Microsoft porque eu não consigo entender o porquê de só agora na versão 2012 os caras terem colocado este recurso para ajudar na paginação.

  3. Alguma forma de simular isso no SQL Server 2008?

  1. Pingback: Melhorias no SQL Server 2012 « Alex Souza

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: