#749 - Paginazione lato server in SQL Server 2005

Sfruttando alcune novità di SQL Server 2005, come la CTE, il row_number e la clausula TOP parametrica, è possibile estrarre da una tabella un numero limitato di record specificando il numero di pagina e il numero di righe per ciascuna pagina.

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 eseguire un comando 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 migliore rispetto al passato, dato che in SQL Server 2000 TOP non accetta variabili o parametri.

USE AdventureWorks

-- Numero di pagina
DECLARE @PageNumber int;

-- Dimensione di pagina
DECLARE @PageSize int;

SET @PageNumber = 10;
SET @PageSize = 20;

-- 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(RowNumber, ContactID, Title, FirstName, MiddleName, LastName, EmailAddress)
AS (

SELECT TOP(@PageNumber * @PageSize)
RowNumber = ROW_NUMBER() OVER (ORDER BY LastName, FirstName),
ContactID, Title, FirstName, MiddleName, LastName, EmailAddress
FROM Person.Contact

-- Qui potrei aggiungere alcune condizioni di filtraggio.

)

-- Sfrutto il Row_Number della CTE per recuperare
-- unicamente i record della pagina corrente.

SELECT RowNumber, ContactID, Title, FirstName, MiddleName, LastName, EmailAddress
FROM PageRows
WHERE RowNumber > ((@PageNumber - 1) * @PageSize);


Approfondimenti
Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.