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;-- 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);
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.




Stampa
Download 
10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!