Una nuova feature di SqlServer 2005 consente di paginare
agevolmente i record di una query. Si tratta della nuova clausola TOP, che si
presenta come una funzione che accetta anche dei parametri dinamici. Chi ha
provato in Sql Server 2000 a paginare i record di una tabella si sarà scontrato
con delle difficoltà talvolta davvero eccessive. Paginare significava creare
sempre delle query dinamiche, facendo uso di TOP, SET ROWCOUNT, con tutti i
rischi si sql injection che questo comporta.
Ecco, nel box come con Sql Server 2005 si potrà paginare una
tabella. Il criterio è quello di estrarre i primi n record (righe x
pagina) dopo aver escluso le prime m pagine, dove m parte
da 0 che ha il significato di pagina 1.
declare @pagesize int;
declare @pageindex int;
-- dimensione di una pagina
set @pagesize = 10;
-- indice della pagina richiesta dove 0==prima pagina
set @pageindex = 0;
select top(@pagesize) *
from sysobjects
where id not in
(
select top(@pagesize * @pageindex) id
from sysobjects
order by name asc
)
order by name asc;
Con l'uso di TOP(n) la
questione si semplifica notevolmente, ma tuttavia ancora non siamo in presenza
di una soluzione ottimale come quella che ad esempio è presente in MySql
(clausola LIMIT). Infatti dovremo comunque replicare l'istruzione per ogni
tipo colonna di ordinamento, e in caso di uso di una WHERE ricadremo
ancora una volta nella costruzione dinamica dello statement, almeno in una buona
parte dei casi.
Certo è che il miglioramento è
significativo, infatti la semplificazione introdotta da TOP(n) ci permette di
concentrarci maggiormente nei pericoli della concatenazione di stringhe SQL
sperando di non commettere errori.
powered by IMHO 1.2