Následující uložená procedura T-SQL je velmi efektivní implementace stránkování. Optimalizátor SQL dokáže najít první ID velmi rychle. Zkombinujte to s použitím ROWCOUNT a získáte přístup, který je efektivní z hlediska CPU i čtení. U tabulky s velkým počtem řádků určitě překoná jakýkoli přístup, který jsem viděl pomocí dočasné tabulky nebo proměnné tabulky.
Poznámka:V tomto příkladu používám sloupec sekvenční identity, ale kód funguje na jakémkoli sloupci vhodném pro řazení stránek. Také zalomení sekvencí v používaném sloupci neovlivňuje výsledek, protože kód vybírá spíše počet řádků než hodnotu sloupce.
EDIT:Pokud třídíte podle sloupce s potenciálně nejedinečnými hodnotami (např. Příjmení), přidejte druhý sloupec do klauzule Order By, aby byly hodnoty řazení opět jedinečné.
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