La seguente stored procedure T-SQL è un molto implementazione efficiente del paging. L'ottimizzatore SQL può trovare il primo ID molto velocemente. Combina questo con l'uso di ROWCOUNT e hai un approccio che è sia efficiente per la CPU che per la lettura. Per una tabella con un numero elevato di righe, batte sicuramente qualsiasi approccio che ho visto utilizzando una tabella temporanea o una variabile di tabella.
NB:in questo esempio sto usando una colonna di identità sequenziale, ma il codice funziona su qualsiasi colonna adatta per l'ordinamento delle pagine. Inoltre, le interruzioni di sequenza nella colonna utilizzata non influiscono sul risultato poiché il codice seleziona un numero di righe anziché un valore di colonna.
EDIT:se stai ordinando su una colonna con valori potenzialmente non univoci (ad es. LastName), aggiungi una seconda colonna alla clausola Order By per rendere nuovamente univoci i valori di ordinamento.
CREATE PROCEDURE dbo.PagingTest
(
@PageNumber int,
@PageSize int
)
AS
DECLARE @FirstId int, @FirstRow int
SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow
-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.
SELECT @FirstId = [Id]
FROM dbo.TestTable
ORDER BY [Id]
SET ROWCOUNT @PageSize
SELECT *
FROM dbo.TestTable
WHERE [Id] >= @FirstId
ORDER BY [Id]
SET ROWCOUNT 0
GO