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