Gestire la paginazione dei dati con SQL Server

di Riccardo Golia, in Tips & Tricks,

Ho trovato interessante l'articolo di Lorenzo Braidi sulla gestione della paginazione dei dati presente nel numero di novembre 2004 di Computer Programming. In particolare si spiega come riuscire ad estrarre da una tabella contenente una grande mole di dati un numero di record esattamente pari ad una prefissata dimensione di pagina.

Nel caso di SQL Server il trucco sta nell'annidare tre query una dentro all'altra:

  • la prima query estrae tutti i record fino al limite superiore filtrandoli e ordinandoli secondo quanto richiesto dall'applicazione;
  • la seconda query prende il resultset della prima, ordinato in maniera decrescente, limitatamente ai record da inserire nella pagina;
  • la terza query ripristina l'ordinamento della prima query sui record della pagina.

La query complessiva dovrebbe pertanto avere una forma di questo tipo:

SELECT TOP [dimPage] [field1], [field2], ...
FROM (SELECT TOP [dimPage] [field1], [field2], ...
FROM (SELECT TOP ([dimPage] * [numPage]) [field1], [field2], ...
FROM [table]
WHERE [conditions]
ORDER BY [order] ASC) AS TMP1
ORDER BY [order] DESC) AS TMP2
ORDER BY [order] ASC

Commenti

Visualizza/aggiungi commenti

14 commenti | Condividi su: Twitter, Facebook, LinkedIn
ITHost, il 7 dicembre 2004 alle 12:42
prova a dare un occhio alla simulazione della clausula LIMIT in sql server e avrai lo stesso risultato

http://blogs.aspitalia.com/cp/post520.aspx
andrewz, il 7 dicembre 2004 alle 13:05
E se volessi sapere contemporaneamente quanti record totali sono restituiti dalla query?

Ciao!
Daniele Bochicchio, il 7 dicembre 2004 alle 13:08
usi una SP con output parameter come faccio io nel 99% dei casi, usando una tab temporanea
imho il codice della SP è sicuramente più leggibile e diventa difficile fare errori, oltre che più semplice manutenerla.
»»»» rickyvr, il 7 dicembre 2004 alle 13:08
La query restituisce al massimo [dimPage] records.
Cosa intendi per record totali?

Ciao, Ricky.
Daniele Bochicchio, il 7 dicembre 2004 alle 15:43
quelli che la query darebbe come totale.
se fai la paginazione, devi pur sapere fino a quale pagina arriva...
andrewz, il 14 dicembre 2004 alle 20:52
Ora mi avete fatto venire un dubbio: è meglio l'utilizzo della tabella temporanea oppure l'esecuzione di due query, una per il conteggio e la seguente con l'uso del TOP per avere solo i record necessari? (Io ho sempre preferito la tabella temporanea).

Forse che l'uso della tabella temporanea pregiudica le prestazioni con query che restituiscono centinaia di migliaia (se non milioni) di record?

Ciao

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese