Wednesday, November 26, 2008

Cách phân trang dữ liệu trong SQL Server 2005

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