ليس من المنطقيّ عرض مئات السجلات في صفحة واحدة.. ليس فقط لبطء تحميلها، ولكن أيضا لصعوبة تصفّحها.
لهذا كان الحلّ هو تقسيم هذه السجلات إلى مجموعة صفحات لتحسين الاداء
التطبيق
المثال التالى يوضح كيفية تطبيق هذا الاسلوب
سنستخدم قاعدة البيانات Northwind ونعمل فيها اجراء مخزن الذى يعيد الصفحات الاول،التاالى،السابق،الاخير او صفحة محددة وكل صفحة تحتوى على عشر سجلات من الجدول Order
CREATE PROCEDURE SOLO_PageOrders
@PageCommand nvarchar(10),
@FirstOrderId int = null,
@LastOrderId int = null,
@PageCount int output,
@CurrentPage int output
AS
SET NOCOUNT ON
select @PageCount = CEILING(COUNT(*)/10) from Orders
-- first page is requested or previous page when the current
-- page is already the first
if @PageCommand = 'FIRST' or (@PageCommand = 'PREVIOUS' and
@CurrentPage <= 1)
begin
select top 10 *
from Orders
order by OrderID
set @CurrentPage = 1
return 0
end
-- last page is requested or next page when the current
-- page is already the last
if @PageCommand = 'LAST' or (@PageCommand = 'NEXT' and
@CurrentPage >= @PageCount)
begin
select a.*
from
(select TOP 10 *
from orders
order by OrderID desc) a
order by OrderID
set @CurrentPage = @PageCount
return 0
end
if @PageCommand = 'NEXT'
begin
select TOP 10 *
from Orders
where OrderID > @LastOrderId
order by OrderID
set @CurrentPage = @CurrentPage+1
return 0
end
if @PageCommand = 'PREVIOUS'
begin
select a.*
from (
select TOP 10 *
from Orders
where OrderId < @FirstOrderId
order by OrderID desc) a
order by OrderID
set @CurrentPage = @CurrentPage-1
return 0
end
if @PageCommand = 'GOTO'
begin
if @CurrentPage < 1
set @CurrentPage = 1
else if @CurrentPage > @PageCount
set @CurrentPage = @PageCount
declare @RowCount int
set @RowCount = (@CurrentPage * 10)
exec ('select * from
(select top 10 a.* from
(select top ' + @RowCount + ' * from Orders order by OrderID) a
order by OrderID desc) b
order by OrderID')
return 0
end
return 1هذا الاجراء يحتوى على الممررات الاتية:
@PageCommand
وهو ممر داخل input parameter وهو يقبل احد القيم التالية : FIRST, LAST, PREVIOUS, NEXT, or GOTO وهو يحدد صفحة النتائج العائدة الى العميل
@First OrderId
وهو ممر داخل input parameter وهو يحتوى على رقم الطلب OrderID للسجل الاول فى صفحة البيانات
@Last OrderId
وهو ممر داخل input parameter وهو يحتوى على رقم الطلب OrderID للسجل الاخير فى صفحة البيانات
@PageCount
وهو ممر خارج output parameter ويعيد عدد الصفحات الممكنة حيث كل صفحة تحتوى على عشر سجلات فقط
@CurrentPage
وهو ممر خارج output parameter وهو يعيد رقم الصفحة الحالية للبيانات المعروضه
البرنامج موجود فى المرفقات مع الكود كل ما عليك هو اضافة الاجراء المخزن فى قاعدة البيانات المذكورة اعلاه
بالتوفيق



