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)
Con la nuova versione SQL Server (ora sto provando la CTP3) il giochino sarà ancora più semplice !!
La sintassi dell'order by ora prevede le clausole Offset e Fetch next che consentono di implementare la paginazione senza utilizzare funzioni di ranking !!!!
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 !!!!

