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);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.