زمانی شما بخواهید اطلاعاتی (مثلاً اطلاعات یک جدول) را به کاربر نمایش دهید عمل صفحه بندی یا Paging را انجام میدهید. این کار (صفحه بندی) بیشتر در پروژه های تحت وب مانند ASP.NET استفاده میشود.
ASP.NET به طور پیش فرض، همه اطلاعات جدول را از روی سرور به سمت کلاینت Load کرده و بعد عمل صفحه بندی را انجام میدهد، این کار باعث کاهش شدید سرعت میشود.
برنامه نویسان به دنبال راه حلی بودند که بتوانند از بارگذاری (Load) تمامی اطلاعات به صورت یک باره جلوگیری کنند و اطلاعات مربوط به هر صفحه را دقیقاً زمان انتخاب آن صفحه به کاربر نمایش دهند. شما فرض کنید جدولی که میخواهید اطلاعات آن را به کاربر نمایش دهید شامل 1000000 رکورد باشد، در حالت پیش فرض ASP.NET همه این اطلاعات به صورت یک باره بارگذاری شده و سپس صفحه بندی خواهد شد که باعث کاهش سرعت چشمگیر خواهد شد.
ولی اگر بتوانیم کاری کنیم که اطلاعات هر صفحه را هنگام درخواست کاربر (انتخاب صفحه مورد نظر) از سرور بارگذاری و به او نشان دهیم، سرعت برنامههایمان خیلی بالاتر خواهد بود که معمولاً با استفاده از تکنولوژی Ajax و … صورت میگیرد.
صفحه بندی در SQL Server به سه روش انجام میشود:
1- استفاده از ()ROW_NUMBER به کمک CTE.
2- استفاده از TOP و EXCEPT.
3- صفحه بندی با استفاده از AD-Hoc Query در SQL Server 2012.
دیتابیسی که برای مثالها انتخاب شده است، دیتابیس Northwind میباشد.
آشنایی با تابع ()ROW_NUMBER:
این تابع جز توابع Ranking در SQL Server میباشد که با استفاده از آن میتوانید ردیف رکورد را در خروجی نمایش دهید.
همان طور که در شکل مشاهده میکنید با استفاده از تابع ()ROW_NUMBER ستونی با عنوان RowNum به دستور SELECT اضافه شده که نشانگر ردیف رکورد میباشد و از 1 تا آخر ادامه یافته است.
با استفاده از همین فیلد میتوانیم اطلاعات را به صورت صفحه بندی شده به کاربر نمایش دهیم. مثلاً اطلاعات سطر 1 تا 10 یا 11 تا 20 و الی آخر. نکته اینجاست که به صورت عادی نمیتوانیم روی فیلد RowNum شرط بگذاریم و برای این کار بایستی از CTE استفاده کنیم.
برای استفاده بهتر از این روش میتوانید Script خود را به صورت پارامتریک نوشته و از آن استفاده نمایید. نیز میتوانید به صورت یک Stored Procedure تعریف کرده و از آن استفاده نمایید.
اسکریپت آن به شکل زیر می باشد:
[sql]
USE Northwind
GO
DECLARE
@pagenum AS INT = 3,
@pagesize AS INT = 10;
SELECT OrderID,CustomerID,EmployeeID,OrderDate
FROM Orders ORDER BY OrderID
OFFSET (@pagenum – 1) * @pagesize ROWS FETCH NEXT @pagesize ROWS ONLY;
[/sql]
این فیلم آموزشی شامل مباحث زیر میباشد:
1- آشنایی با مفهوم Paging (صفحه بندی).
2- آشنایی با تابع ()ROW_NUMBER در SQL Server.
3- نحوه انجام صفحه بندی با استفاده از ()ROW_NUMBER.
دانلود این فیلم آموزشی
[دانلود یافت نشد]