Prosedur tersimpan T-SQL berikut adalah sangat implementasi paging yang efisien. Pengoptimal SQL dapat menemukan ID pertama dengan sangat cepat. Kombinasikan ini dengan penggunaan ROWCOUNT, dan Anda memiliki pendekatan yang hemat CPU dan efisien baca. Untuk tabel dengan jumlah baris yang banyak, ini pasti mengalahkan pendekatan apa pun yang pernah saya lihat menggunakan tabel sementara atau variabel tabel.
NB:Saya menggunakan kolom identitas sekuensial dalam contoh ini, tetapi kode berfungsi pada kolom apa pun yang cocok untuk penyortiran halaman. Selain itu, jeda urutan dalam kolom yang digunakan tidak memengaruhi hasil karena kode memilih sejumlah baris daripada nilai kolom.
EDIT:Jika Anda mengurutkan pada kolom dengan nilai yang berpotensi tidak unik (mis. LastName), tambahkan kolom kedua ke klausa Order By untuk membuat nilai pengurutan menjadi unik lagi.
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