Следващата T-SQL съхранена процедура е много ефективно изпълнение на пейджинг. SQL оптимизаторът може да намери първия идентификатор много бързо. Комбинирайте това с използването на ROWCOUNT и имате подход, който е едновременно ефективен за процесора и четене. За таблица с голям брой редове това със сигурност надминава всеки подход, който съм виждал, използвайки временна таблица или таблична променлива.
NB:Използвам колона с последователна идентичност в този пример, но кодът работи на всяка колона, подходяща за сортиране на страници. Освен това прекъсванията на последователността в използваната колона не влияят на резултата, тъй като кодът избира брой редове, а не стойност на колона.
РЕДАКТИРАНЕ:Ако сортирате по колона с потенциално неуникални стойности (напр. фамилно име), тогава добавете втора колона към клаузата Order By, за да направите стойностите за сортиране отново уникални.
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