Följande T-SQL lagrad procedur är mycket effektiv implementering av personsökning. SQL-optimeraren kan hitta det första ID:t mycket snabbt. Kombinera detta med användningen av ROWCOUNT, så har du ett tillvägagångssätt som är både CPU-effektivt och läseffektivt. För en tabell med ett stort antal rader överträffar det verkligen alla metoder som jag har sett med en temporär tabell eller tabellvariabel.
OBS:Jag använder en sekventiell identitetskolumn i det här exemplet, men koden fungerar på vilken kolumn som helst som är lämplig för sidsortering. Sekvensbrytningar i kolumnen som används påverkar inte resultatet eftersom koden väljer ett antal rader snarare än ett kolumnvärde.
EDIT:Om du sorterar på en kolumn med potentiellt icke-unika värden (t.ex. Efternamn), lägg sedan till en andra kolumn i Ordningsby-satsen för att göra sorteringsvärdena unika igen.
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