Per amor di completezza, riporto un
altro modo di paginare i record con Sql Server che mi è stato suggerito in
risposta al mio precedente post su questo argomento. In Sql2005 ci sarà una
nuova funzione ROW_NUMBER() che usata in coppia con OVER(ORDER BY ...) aggiunge
al resultset una colonna con l'indice della riga.
Ecco un esempio per
chiarire:
declare @pagesize int;
declare @pagenumber int;
set @pagesize=10;
set @pagenumber=0;
select * from
(
select row_number()over(order by name asc) as rownumber, *
from sysobjects
) as A
where
A.rownumber>@pagenumber * @pagesize and
A.rownumber<=@pagenumber * @pagesize + @pagesize;
L'esempio fa la stessa cosa di quello riportato nel
post precedente, con gli stessi parametri di ingresso. Tuttavia lo fa meglio...
A quanto leggo in rete, questo sistema dovrebbe
garantire delle performances migliori e soprattutto lineari. Il metodo che ho
illustrato l'altra volta infatti ha il difetto di essere molto veloce nelle
prime pagine, ma di peggiorare il proprio risultato mano a mano che si procede
verso le pagine successive. Questo tipicamente non è un grosso problema, dato
che le pagine usate dagli utenti non superano le prime dieci, ma è chiaro che
potendo lavorare con l'oro, perchè ci si dovrebbe accontentare dell'argento?
Grazie ai
suggeritori!
powered by IMHO 1.2