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