PDA

View Full Version : n متغير در «SELECT TOP n * FROM»



A.Farzin
جمعه 01 آذر 1387, 21:05 عصر
با سلام

فرض كنيد جدولي داريم حاوي 000ر500 ركورد. ميخواهيم با يك SELECT تعداد n تا از جديدترين مقادير اضافه‌شده به جدول را استخراج كنيم. براي اين منظور از دستور زير استفاده مي‌كنيم.

ُSELECT TOP 50 * FROM MyTable ORDER BY NEWID()
علت اين كار سرعت دادن به فراخواني اطلاعات از سرور است ولي ممكن است در طرف كلاينت به تمام ركوردهاي منطبق با شروط WHERE نياز باشد. در اين حالت فقط 50 تاي آخر به كاربر نشان داده مي‌شود.
با چه مكانيزمي ميتوان كاري كرد كه وقتي كاربر 50 ركورد اول داده شده به او را پيمايش كرد و روي ركورد اول ديتاست 50 ركورد اول قرار گرفت، مقدار n به 100 تغيير كند و 50 كورد ديگر هم به ديتاست وي اضافه شود. به همين ترتيب وقتي روي كورد اول ديتاست 100 ركورد اول قرار گرفت باز هم مقدار n به 150 تغيير كند و ...
به عبارت ديگر مقدار n محدود و ثابت نباشد و بنا به خواست كلاينت n تا n تا به همان ديتاست افزوده شود و بدين شكل تمام 100% كوردها در صورت لزوم در اختيار كاربران قرار خواهد گرفت.

رضا عربلو
جمعه 01 آذر 1387, 21:23 عصر
تـکنیکی که مد نظر شما است Paging نام دارد. در همین سایت جستجو کنید.
http://www.4guysfromrolla.com/webtech/041206-1.shtml
http://aspnet.4guysfromrolla.com/articles/031506-1.aspx
http://databases.aspfaq.com/database/how-do-i-page-through-a-recordset.html

A.Farzin
شنبه 02 آذر 1387, 18:32 عصر
با اين شرايط فكر ميكنم با ADO 2 امكان Paging ركوردست فراهم نباشد؟ آيا درسته

AminSobati
شنبه 02 آذر 1387, 20:48 عصر
این رو هم ببینید
http://www.aspfaq.com/show.asp?id=2120

masoudcg1
دوشنبه 04 آذر 1387, 20:28 عصر
با نوشتن این SP
CREATE SP @N INT
as
decalre @s nvarchar(100 ) --a
set @s='select top '+@n+'(id) from yourtable'
exec sp_executesql @s