Poniższa procedura składowana T-SQL jest bardzo sprawne wdrożenie stronicowania. Optymalizator SQL może bardzo szybko znaleźć pierwszy identyfikator. Połącz to z użyciem ROWCOUNT, a otrzymasz podejście, które jest wydajne zarówno dla procesora CPU, jak i dla odczytu. W przypadku tabeli z dużą liczbą wierszy z pewnością bije to na głowę każde podejście, które widziałem, wykorzystujące tabelę tymczasową lub zmienną tabeli.
Uwaga:w tym przykładzie używam kolumny tożsamości sekwencyjnej, ale kod działa na dowolnej kolumnie odpowiedniej do sortowania stron. Ponadto podziały sekwencji w używanej kolumnie nie wpływają na wynik, ponieważ kod wybiera liczbę wierszy, a nie wartość kolumny.
EDYCJA:Jeśli sortujesz według kolumny z potencjalnie nieunikalnymi wartościami (np. LastName), dodaj drugą kolumnę do klauzuli Order By, aby ponownie wartości sortowania były unikatowe.
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