Thủ tục được lưu trữ T-SQL sau đây là một rất thực hiện phân trang hiệu quả. Trình tối ưu hóa SQL có thể tìm thấy ID đầu tiên rất nhanh. Kết hợp điều này với việc sử dụng ROWCOUNT và bạn có một cách tiếp cận vừa hiệu quả về CPU vừa hiệu quả về khả năng đọc. Đối với một bảng có nhiều hàng, nó chắc chắn đánh bại bất kỳ cách tiếp cận nào mà tôi đã thấy bằng cách sử dụng bảng hoặc biến bảng tạm thời.
NB:Tôi đang sử dụng cột nhận dạng tuần tự trong ví dụ này, nhưng mã hoạt động trên bất kỳ cột nào phù hợp để sắp xếp trang. Ngoài ra, ngắt trình tự trong cột đang được sử dụng không ảnh hưởng đến kết quả vì mã chọn một số hàng thay vì một giá trị cột.
CHỈNH SỬA:Nếu bạn đang sắp xếp trên một cột có các giá trị có khả năng không phải là duy nhất (ví dụ:LastName), thì hãy thêm cột thứ hai vào mệnh đề Order By để làm cho các giá trị sắp xếp trở lại duy nhất.
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