Khi tìm kiếm và hiển thị dữ liệu, việc phân trang dữ liệu kết quả tìm kiếm rất quan trọng, nhất là với lượng dữ liệu lớn. Trong SQL Server 2005 có hàm ROW_NUMBER cho phép bạn thực hiện phân trang các bản ghi nhận được.
Ví dụ sau sẽ minh họa cách thực hiện phân trang dữ liệu:
CREATE PROCEDURE dbo.spGetManyProducts @ProducNo VARCHAR(13) = NULL, @PageIndex INT, @PageSize INT AS BEGIN WITH ProductRecords AS ( SELECT ROW_NUMBER() OVER (ORDER BY ProductName) AS RowIndex, ProductNo, ProductName, Description FROM TbProducts WHERE (@ProductNo IS NULL OR ProductNo LIKE @ProductNo) ) , GetTotalRowCount AS ( SELECT MAX(RowIndex) AS TotalRowCount FROM ProductRecords ) SELECT ProductNo, ProductName, Description, TotalRowCount FROM ProductRecords, GetTotalRowCount WHERE (RowIndex BETWEEN (@PageIndex - 1) * @PageSize + 1 AND @PageIndex*@PageSize) END
Trong đoạn code TSQL ở trên còn cho phép bạn lấy về tổng số dòng dữ liệu có thể nhận được với mỗi kết quả tìm kiếm.
Đây là cách chỉ được sử dụng trên SQL Server 2005 hoặc mới hơn. Còn với SQL Server 2000, bạn có thể sử dụng bảng tạm để lấy toàn bộ kết quả tìm kiếm, sau đó lấy ra các dòng cần thiết với câu lệnh phù hợp. Tôi có 1 cách khác để phân trang trên SQL Server 2000 sẽ đưa ra trong một dịp khác.
No comments:
Post a Comment