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);
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Aprire il Command Prompt direttamente da Explorer, il 30 aprile 2005 alle 01:38
- Gestire la paginazione dei dati con SQL Server, il 7 dicembre 2004 alle 01:50
- Quando Enterprise Manager si impalla..., il 25 agosto 2004 alle 09:51