Den følgende T-SQL-lagrede procedure er meget effektiv implementering af personsøgning. SQL-optimeringsværktøjet kan finde det første ID meget hurtigt. Kombiner dette med brugen af ROWCOUNT, og du har en tilgang, der både er CPU-effektiv og læseeffektiv. For en tabel med et stort antal rækker slår den bestemt enhver tilgang, som jeg har set ved at bruge en midlertidig tabel eller tabelvariabel.
NB:Jeg bruger en sekventiel identitetskolonne i dette eksempel, men koden virker på enhver kolonne, der er egnet til sidesortering. Sekvensbrud i den anvendte kolonne påvirker heller ikke resultatet, da koden vælger et antal rækker i stedet for en kolonneværdi.
EDIT:Hvis du sorterer på en kolonne med potentielt ikke-unikke værdier (f.eks. Efternavn), skal du tilføje en anden kolonne til Ordre efter-sætningen for at gøre sorteringsværdierne unikke 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