การแบ่งหน้าคืออะไร?

การแบ่งหน้าเป็นกระบวนการของการแบ่งข้อมูลขนาดใหญ่ออกเป็นชุดข้อมูลขนาดเล็กในหน้าที่ไม่ต่อเนื่อง มีการใช้กันอย่างแพร่หลายในเว็บแอปพลิเคชัน

การแบ่งหน้าทำงานอย่างไรใน MS SQL Server

ใน MS SQL Serverเราสามารถบรรลุฟังก์ชันการแบ่งหน้าโดยใช้ OFFSET และ FETCH คำสั่งที่มี ORDER BY ใน SELECT การบอกเล่า

  • OFFSET: หมายถึงจำนวนแถวที่จะข้ามจากชุดผลลัพธ์ ควรเป็น 0 หรือมากกว่า 0
  • FETCH:หมายถึงจำนวนแถวที่จะแสดงในผลลัพธ์

จุดสำคัญที่ควรพิจารณาขณะใช้งาน OFFSET และ FETCH:

  • ORDER BY เป็นข้อบังคับในการใช้งาน OFFSET FETCH ข้อ
  • OFFSET เป็นข้อบังคับและ FETCH เป็นทางเลือก
  • TOP ประโยคไม่สามารถใช้ใน SELECT ภาวนาด้วย OFFSET FETCH.

มาดูตัวอย่าง:

ในตัวอย่างด้านล่าง OFFSET 0 และ FETCH NEXT 5 ROWS kip no rows และคืนค่า 5 แถวถัดไปในชุดข้อมูล ซึ่ง 5 แถวแรกในชุดข้อมูล

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 และดึงข้อมูลถัดไป 5 แถว

ในตัวอย่างด้านล่าง OFFSET 3 และ FETCH NEXT 5 ROWS หมายถึงข้าม 3 แถวแรกและส่งคืน 5 แถวถัดไปในชุดข้อมูล

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 และ FETCH ถัดไป 5 แถวPageNumberRowsOfPage

  • PageNumber — หมายถึงเลขหน้า
  • RowsOfPage — แสดงจำนวนแถวในหน้า

ทีนี้มาคำนวณจำนวนแถวที่จะข้ามไปเมื่อเราย้ายไปหน้าถัดไปสูตร(@PageNumber-1) * @RowsOfPage กำลังถูกใช้ใน OFFSETและจำนวนแถวจะถูกส่งกลับใน FETCH.

ที่นี่, PageNumber คือ 2 และ RowsOfPage คือ 5 ซึ่งหมายถึงส่งคืนชุดข้อมูลสำหรับหน้าหมายเลข 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 และ FETCH NEXT @RowsOfPage ROWS

บทสรุป

ในแอปพลิเคชันแบบเรียลไทม์ ลอจิกที่สมบูรณ์นี้สามารถเขียนในขั้นตอนการจัดเก็บซึ่งเรียกว่าการคลิกปุ่ม “ถัดไป” หรือปุ่มหมายเลขหน้าในเว็บแอปพลิเคชันเพื่อแสดงชุดของเรคคอร์ดบนหน้า

วิธีการแบ่งหน้าทั้งหมดใน MS SQL Server โดยใช้ OFFSET และ FETCH [Simple] วิธีการที่ฉันกล่าวถึงทำงานได้ดี ขอบคุณสำหรับการอ่านและโปรดแสดงความคิดเห็นด้านล่างด้วยความคิดของคุณในบทความนี้และแบ่งปัน signalfix.net กับเพื่อนของคุณ.