گرفتن رکورد از بانک به صورت صفحه بندی شده (هربار 10 رکورد بگیره )
سلام دوستان
من یه جدول دارم که با کوئری که نوشتم 1000 تا رکورد بهم میده
حالا میخوام تو استرود پروسیجر کدی بنویسم که به استرودپروسیجر یه شماره ضفحه بدم و یه تعداد رکورد
حالا استرود پروسیجر بیاد 1000 تا رکورد رو به اون تعداد رکوردی که بهش دادم تقسیم کنه
و من هر بار که شماره صفحه دادم اون همون تعداد رکورد رو بهم بده
مثلا
شماره صفحه 1 - 20 عدد بده
بیا رکورد 980 تا 1000 رو بهم بده ....
دوباره
شماره صفحه 2 - دیگه بازم همون 20 تا
بیاد رکورد 980 تا 980 رو بهم بده
ممنون میشم کمکم کنید
نقل قول: گرفتن رکورد از بانک به صورت صفحه بندی شده (هربار 10 رکورد بگیره )
اين كار بستگي به بانك و طراحي اون داره. توي سايت در اين مورد بحث شده و چندين راه حل ارائه دادند.
يكي از راههاي مناسب ، استفاده از فيلدي مثل ID توي جدول است(يونيك باشه) ، بدليل اينكه ميشه روي اين ID ايندكس تعريف كرد واكشي اطلاعات خيلي سريع ميشه از طرف ديگه دستور sql اون هم بسيار ساده ميشه
Select * From TableName Where ID between 960 AND 980
كه اعداد رو ميشه به صورت پارامتر ارسال كرد!!!
راه ديگه (اگر نميخوايد از ID استفاده كنيد) استفاده از كرسر است. روش قبل نسبت به اين روش هم از نظر سرعت هم از نظر حجم كدنويسي مناسب تر به حساب مياد.
اگر يه جستجو توي سايت كنيد روشهاي ديگه اي هم پيدا ميكنيد.
نقل قول: گرفتن رکورد از بانک به صورت صفحه بندی شده (هربار 10 رکورد بگیره )
روش مناسب تر:
--region [dbo].[Sample_Select_Page]
------------------------------------------------------------------------------------------------------------------------
-- Generated By: Hossein using CodeSmith 5.0.0.0
-- Template: SQL.cst
-- Procedure Name: [dbo].[Sample_Select_Page]
-- Date Generated: الاربعاء, اكتوبر 13, 2010
------------------------------------------------------------------------------------------------------------------------
Create PROCEDURE [dbo].[Sample_Select_Page]
@PageIndex int,
@PageSize int
AS
SET NOCOUNT ON
SELECT
[SampleID],
[SampleTitle],
[SampleDescription]
[CreatedDate],
[LastModifided]
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY [SampleID]) AS RowNum FROM [dbo].[Sample])
AS e
--WHERE RowNum BETWEEN ((@PageIndex * @PageSize) - (@PageSize - 1)) AND (@PageIndex * @PageSize)
WHERE RowNum BETWEEN ((@PageIndex * @PageSize) + 1) AND ((@PageIndex + 1) * @PageSize)
--endregion
جناب راد در GridView ورژن 7 برای Paging از این روش استفاده کرده بودند که روش مناسبی هست.
و برای گرفتن یک Range خاص(مثلا از 1200 تا 1230)
--region [dbo].[Sample_Select_Range]
------------------------------------------------------------------------------------------------------------------------
-- Generated By: Hossein using CodeSmith 5.0.0.0
-- Template: SQL.cst
-- Procedure Name: [dbo].[Sample_Select_Range]
-- Date Generated: الاربعاء, اكتوبر 13, 2010
------------------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE [dbo].[Sample_Select_Range]
@FromIndex int,
@ToIndex int
AS
SET NOCOUNT ON
SELECT
[SampleID],
[SampleTitle],
[SampleDesxription]
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum FROM [dbo].[Sample])
AS e
WHERE RowNum BETWEEN @FromIndex AND @ToIndex
--endregion
GO
نقل قول: گرفتن رکورد از بانک به صورت صفحه بندی شده (هربار 10 رکورد بگیره )
نقل قول:
ALTER PROCEDURE dbo.Select_imageaplod
@page int
AS
SELECT
x.imageURL,
x.imagetext,
x.id,
x.filename
FROM
(
SELECT
row_number() over( order by id ) rn,
imageURL,
imagetext,
id,
filename
FROM
Tbl_aplodimage
) x
WHERE
rn between ((@page-1) * 10 ) + 1 and @page * 10
ORDER BY
x.id;
RETURN
این کد هم میشه
گرفته شده از این لینک :
https://barnamenevis.org/showthread.php?t=253507