Phân trang là gì?

Phân trang là quá trình phân chia dữ liệu lớn thành các tập dữ liệu nhỏ hơn trong các trang rời rạc. Nó được sử dụng rộng rãi trong các ứng dụng web.

Phân trang hoạt động như thế nào trong MS SQL Server?

Trong MS SQL Serverchúng tôi có thể đạt được chức năng phân trang bằng cách sử dụng OFFSETFETCH mệnh đề có ORDER BY trong SELECT bản kê khai.

  • OFFSET: Đại diện cho số hàng được bỏ qua từ tập kết quả. Nó phải là 0 hoặc lớn hơn 0.
  • FETCH: Đại diện cho số hàng được hiển thị trong kết quả.

Các điểm quan trọng cần cân nhắc khi sử dụng OFFSETFETCH:

  • ORDER BY là bắt buộc để sử dụng OFFSET FETCH Mệnh đề.
  • OFFSET là bắt buộc và FETCH Là tùy chọn.
  • TOP mệnh đề không thể được sử dụng trong SELECT mối quan hệ với OFFSET FETCH.

Hãy xem các ví dụ:

Trong ví dụ dưới đây, OFFSET 0FETCH NEXT 5 ROWS kip không có hàng và trả về 5 hàng tiếp theo trong tập dữ liệu, 5 hàng đầu tiên trong tập dữ liệu.

SELECT EmployeeKey,FirstName,LastName,Title,EmailAddress,
Phone,EmergencyContactName,DepartmentName
FROM dbo.DimEmployee WITH(NOLOCK)
ORDER BY EmployeeKey 
OFFSET 0 ROWS
FETCH NEXT 5 ROWS ONLY

OFFSET 0 và TÌM KIẾM 5 ROWS TIẾP THEO

Trong ví dụ dưới đây, OFFSET 3FETCH NEXT 5 ROWS nghĩa là bỏ qua 3 hàng đầu tiên và trả về 5 hàng tiếp theo trong tập dữ liệu.

SELECT EmployeeKey,FirstName,LastName,Title,EmailAddress,
Phone,EmergencyContactName,DepartmentName
FROM dbo.DimEmployee WITH(NOLOCK)
ORDER BY EmployeeKey 
OFFSET 3 ROWS
FETCH NEXT 5 ROWS ONLY

OFFSET 3 và TÌM KIẾM 5 ROWS TIẾP THEOPageNumberRowsOfPage

  • PageNumber – Đại diện cho số trang
  • RowsOfPage – Đại diện cho không có hàng trên một trang

Bây giờ, để tính số hàng bị bỏ qua khi chúng ta chuyển sang trang tiếp theo(@PageNumber-1) * @RowsOfPage đang được sử dụng trong OFFSETvà số hàng sẽ được trả lại trong FETCH.

Nơi đây, PageNumber là 2 và RowsOfPage là 5, có nghĩa là trả về tập dữ liệu cho trang số 2.

DECLARE @PageNumber AS INT
       ,@RowsOfPage AS INT

SET @PageNumber=2
SET @RowsOfPage=5

SELECT EmployeeKey,FirstName,LastName,Title,EmailAddress,
Phone,EmergencyContactName,DepartmentName
FROM dbo.DimEmployee WITH(NOLOCK)
ORDER BY EmployeeKey
OFFSET (@PageNumber-1) * @RowsOfPage ROWS
FETCH NEXT @RowsOfPage ROWS ONLY

OFFSET (@ PageNumber-1) * @ RowsofPage và FETCH NEXT @RowsOfPage ROWS

Sự kết luận

Trong ứng dụng thời gian thực, logic hoàn chỉnh này có thể được viết trong quy trình được lưu trữ được gọi khi nhấp vào nút “Tiếp theo” hoặc nút số trang trong ứng dụng web để hiển thị tập hợp các bản ghi trên trang.

Tất cả các cách phân trang trong MS SQL Server bằng cách sử dụng OFFSET và FETCH [Simple] các phương pháp tôi đã đề cập hoạt động tốt. Cảm ơn các bạn đã đọc và hãy bình luận bên dưới với những suy nghĩ của bạn về bài viết này và chia sẻ signalfix.net với bạn bè của bạn.