Bài viết hôm nay sẽ hướng dẫn các bạn cách sử dụng OFFSET - FETCH để đếm tổng số dòng và phân trang trong cùng một câu truy vấn.

Từ SQLServer 2012 trở về sau, chúng ta có thể sử dụng OFFSET - FETCH trong việc phân trang dữ liệu. Bên cạnh đó, để đếm tổng số dòng, thông thường bạn phải dùng thêm một câu query, tuy nhiên có cách khác để thực hiện việc này đơn giản hơn.

Các bạn xem ví dụ bên dưới:

SELECT EmployeeID, EmployeeName, FullName, COUNT(*) OVER () AS TotalRecord
FROM dbo.Employee
ORDER BY EmployeeName 
OFFSET 5 ROWS
FETCH NEXT 5 ROWS ONLY

Ví dụ trên sẽ bỏ qua 5 dòng đầu tiên, trả về 5 dòng tiếp theo từ dòng thứ 6-10 trong tổng số 13 dòng

Lưu ý: Ở cách này Tổng số dòng TotalRecord sẽ xuất hiện ở tất cả các dòng trong một column trả về.

Áp dụng trong Stored Procedure

CREATE PROC GetEmployee
	@PageNo int,
	@PageSize int
AS
BEGIN
	SELECT * 
    FROM dbo.Employee
	ORDER BY EmployeeName
	OFFSET (@PageNo-1) * @PageSize ROWS
	FETCH NEXT @PageSize ROWS ONLY
END

Thực thi :

EXEC GetEmployee @PageNo = 2, @PageSize = 5

Chúc các bạn thành công!

AutoCode.VN

minhnhatict@gmail.com SQL Server