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 ascas row,
      sysobjects.*
    
from sysobjects 
as A
where 
    
A.row>@pagenumber @pagesize and 
    
A.row<=@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

Commenti (1) -

# | Adrian Florea | 01.06.2005 - 17.56

BETWEEN nella clausa WHERE, dovrebbe essere più veloce

Aggiungi Commento