De volgende T-SQL-opgeslagen procedure is een zeer efficiënte implementatie van paging. DE SQL-optimizer kan de eerste ID zeer snel vinden. Combineer dit met het gebruik van ROWCOUNT, en je hebt een aanpak die zowel CPU-efficiënt als lees-efficiënt is. Voor een tabel met een groot aantal rijen is het zeker beter dan elke benadering die ik heb gezien met een tijdelijke tabel of tabelvariabele.
NB:Ik gebruik in dit voorbeeld een sequentiële identiteitskolom, maar de code werkt op elke kolom die geschikt is voor paginasortering. Ook hebben reeksonderbrekingen in de gebruikte kolom geen invloed op het resultaat, aangezien de code een aantal rijen selecteert in plaats van een kolomwaarde.
EDIT:Als u sorteert op een kolom met mogelijk niet-unieke waarden (bijv. LastName), voeg dan een tweede kolom toe aan de Order By-clausule om de sorteerwaarden weer uniek te maken.
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