Gestire la paginazione dei dati con SQL Server 2005

di Riccardo Golia, in Tips & Tricks,

Sfruttando alcune novità di SQL Server 2005, come la CTE, il row_number e la clausula TOP parametrica, è possibile trasformare e migliorare la versione attuale di paginazione lato server dei record, che prevede l'uso combinato di tre SELECT annidate.

La nuova soluzione risulta essere molto più snella ed elegante. Definita una CTE che include una colonna ROW_NUMBER e che usa la clausula TOP per ottenere tutti i record fino all'ultimo della pagina corrente, basta fare una SELECT in funzione del ROW_NUMBER prendendo solo le righe di interesse. La possibilità di utilizzare la parametrizzazione con la clausula TOP rende la nuova soluzione molto potente e flessibile, cosa non possibile nella versione attuale, dato che in SQL Server 2000 TOP non accetta variabili o parametri.

Questo è un esempio molto significativo di come la nuova versione di SQL Server includa novità molto interessanti per gli sviluppatori.

-- Numero di pagina
DECLARE @PageNumber int;<p />-- Dimensione di pagina
DECLARE @PageSize int;
SET @PageNumber = [n];
SET @PageSize = [m];
-- Definisco la CTE con una colonna Row_Number.
-- La clausula TOP è parametrica, per cui è
-- possibile utilizzare anche parametri di input
-- al posto delle variabili definite sopra.
WITH PageRows([field_1], [field_2], [field_3], ...)
AS (
SELECT TOP(@PageNumber * @PageSize)
RowNumber = ROW_NUMBER() OVER (ORDER BY [field_1], ...),
[field_1], [field_2], [field_3], ...
FROM [table_name]
WHERE [where_conditions]
)
-- Sfrutto il Row_Number della CTE per recuperare
-- unicamente i record della pagina corrente.
SELECT [field_1], [field_2], [field_3], ...
FROM PageRows
WHERE RowNumber > ((@PageNumber - 1) * @PageSize);
Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

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