PDA

View Full Version : گرفتن رکورد از بانک به صورت صفحه بندی شده (هربار 10 رکورد بگیره )



majnun
دوشنبه 05 مهر 1389, 23:56 عصر
سلام دوستان

من یه جدول دارم که با کوئری که نوشتم 1000 تا رکورد بهم میده

حالا میخوام تو استرود پروسیجر کدی بنویسم که به استرودپروسیجر یه شماره ضفحه بدم و یه تعداد رکورد

حالا استرود پروسیجر بیاد 1000 تا رکورد رو به اون تعداد رکوردی که بهش دادم تقسیم کنه
و من هر بار که شماره صفحه دادم اون همون تعداد رکورد رو بهم بده

مثلا

شماره صفحه 1 - 20 عدد بده

بیا رکورد 980 تا 1000 رو بهم بده ....

دوباره
شماره صفحه 2 - دیگه بازم همون 20 تا

بیاد رکورد 980 تا 980 رو بهم بده

ممنون میشم کمکم کنید

Reza_Yarahmadi
سه شنبه 06 مهر 1389, 12:12 عصر
اين كار بستگي به بانك و طراحي اون داره. توي سايت در اين مورد بحث شده و چندين راه حل ارائه دادند.
يكي از راههاي مناسب‌ ، استفاده از فيلدي مثل ID توي جدول است(يونيك باشه) ، بدليل اينكه ميشه روي اين ID ايندكس تعريف كرد واكشي اطلاعات خيلي سريع ميشه از طرف ديگه دستور sql اون هم بسيار ساده ميشه

Select * From TableName Where ID between 960 AND 980كه اعداد رو ميشه به صورت پارامتر ارسال كرد!!!
راه ديگه (اگر نميخوايد از ID استفاده كنيد) استفاده از كرسر است. روش قبل نسبت به اين روش هم از نظر سرعت هم از نظر حجم كدنويسي مناسب تر به حساب مياد.

اگر يه جستجو توي سايت كنيد روشهاي ديگه اي هم پيدا ميكنيد.

raziee
جمعه 23 مهر 1389, 12:12 عصر
روش مناسب تر:
--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

majnun
جمعه 23 مهر 1389, 17:26 عصر
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



این کد هم میشه

گرفته شده از این لینک :
http://barnamenevis.org/forum/showthread.php?t=253507