SQL server - paginazione (parte2)

Alberto Miolo 6/11/2018

Per paginare i risultati di una query in SQL si possono usare le window function, in particolare ROW_NUMBER().

Il seguente esempio mostra come estrarre i record dall'11 al 20:

SELECT * FROM

(

SELECT ROW_NUMBER() OVER (ORDER BY fld1, fld2) as N,* FROM MIA_TABELLA ORDER BY fld1, fld2

) x

WHERE n>10 and n<=20

 

A partire dalla versione 2012 di SQL Server è possibile utilizzare le funzioni OFFSET e FETCH come nell'esempio seguente:

SELECT * FROM MIA_TABELLA
ORDER BY fld1,fld2
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY

Come si nota la sintassi diventa molto più semplice e intuitiva, tuttavia non sempre le performance sono migiori.

Segnalo due interessanti articoli sull'argomento:

 

Comparing performance for different SQL Server paging methods

Pagination with OFFSET / FETCH : A better way