09/09/11

La paginazione in SQL Server 2008 e con la CTP3 di denali

Avete mai dovuto paginare i dati con SQL Server 2008 ?
bhè, è un'operazione abbastanza semplice grazie alle funzioni di ranking che il sistema ci mette a disposizione.... Tali funzioni consentono una numerazione arbitraria delle righe reperite dalla selezione e nel nostro caso uso la funzione row_number() over(order by campi da ordinare)

use  TempDb
Go

--Creao una tabella contenente le righe su cui effettuare la paginazione
Create table dbo.Paginata
(
 id int identity(0,1),
 Nome varchar(15) not null,
 Cognome varchar(20) not null
)

ALTER TABLE dbo.Paginata ADD CONSTRAINT
 PK_Paginata PRIMARY KEY NONCLUSTERED 
 (
 Nome,
 Cognome
 ) 

set nocount on
declare @i int = 0

--inserisco le righe
While @i < 100000
begin

 insert into Paginata (Nome,Cognome) 
  values('Nome ' + cast(@i as varchar(8)), 'Cognome ' + cast(@i as varchar(8)));
 set @i = @i + 1

end


--Ricerco la centesima pagina
declare @pagenumber int= 100

--Ogni pagina mi restituisce 10 righe
declare @pagesize int = 10

SELECT TOP (@pagesize) * FROM 
(
 SELECT row_number() over(order by Nome,Cognome) as RowNumber,
  *
 FROM  Paginata
)as A
WHERE RowNumber > ((@pagenumber - 1) * @pagesize)

Con la nuova versione SQL Server (ora sto provando la CTP3) il giochino sarà ancora più semplice !!
--Ricerco la centesima pagina
declare @pagenumber int= 100

--Ogni pagina mi restituisce 10 righe
declare @pagesize int = 10

Select * from Paginata
 order by Nome,Cognome
 OFFSET ((@pagenumber - 1) * @pagesize)  ROWS 
    FETCH NEXT @pagesize ROWS ONLY; 

La sintassi dell'order by ora prevede le clausole Offset e Fetch next che consentono di implementare la paginazione senza utilizzare funzioni di ranking !!!!

0 commenti:

Posta un commento

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Grants For Single Moms