PDA

View Full Version : نمایش تعداد زیاد اطلاعات



S_O_S1982
یک شنبه 10 آبان 1388, 21:25 عصر
سلام
ببخشید اگه سوالم تکراری هستش

سوال من این هستش
من یه Sp دارم که اطلاعاتی که بر می گردونه 150 هزار تا میشه
حالا می خوام کاری کنم که وقتی دفعه اول این Sp اجرا میشه ، 1000 تا رکورد اول رو نشون بده ، دفعه بعد 10000 تای دوم ، و همینطور الی اخر
کسی می تونه تو این زمینه من و راهنمایی کنه؟
پیشاپیش از توجهتون ممنونم

FSarab
یک شنبه 10 آبان 1388, 21:41 عصر
از تكنيك paging استفاده كنيد

S_O_S1982
دوشنبه 11 آبان 1388, 15:11 عصر
میشه بیشتر توضبح بدین؟

مهدی نان شکری
دوشنبه 11 آبان 1388, 18:41 عصر
با سلام
ببین این به کارت میاد؟


Declare @PageNumber int
set @PageNumber = 1
Declare @PageSize int
Set @PageSize = 10

select * from
(Select *,Row_number() Over (Order by GetDate()) as Row from TABLENAME) T
Where Row Between (@PageNumber - 1) * @PageSize + 1 and @PageNumber * @PageSize

TABLENAME نام جدول و PageNumber چندمین صفحه و PageSize اندازه هر صفحه رو مشخص می کنه.

البته این روشیه که خودم استفاده میکنم. شاید خود SQL ابزارهایی داشته باشه که من بی اطلاع هستم.
اگه اساتید کمک کنن ممنون می شم.

spicirmkh
یک شنبه 24 آبان 1388, 17:01 عصر
آيا Select Top 100 کار paging نمي کند

من اگر بخواهم فقط 100 رکورد اول که پيدا کرد جستجو کند نه کل بانک چطور

Ebrahim Asadi
یک شنبه 24 آبان 1388, 18:45 عصر
آيا Select Top 100 کار paging نمي کندنه. Select TOP n فقط n ركورد اول را بر مي گرداند و Select TOP n PERCENT فقط n درصد از كل ركوردها را از ابتداي Result set بر مي گرداند. با اين روش نميشه n درصد بعدي را select كرد.

البته روشي كه دوستمون NanShekari (http://barnamenevis.org/forum/member.php?u=16657) گفتند هم فقط روي SQL Server 2005 , 2008 جواب ميده.

spicirmkh
دوشنبه 25 آبان 1388, 08:19 صبح
نه. Select TOP n فقط n ركورد اول را بر مي گرداند و Select TOP n PERCENT فقط n درصد از كل ركوردها را از ابتداي Result set بر مي گرداند. با اين روش نميشه n درصد بعدي را select كرد.

البته روشي كه دوستمون NanShekari (http://barnamenevis.org/forum/member.php?u=16657) گفتند هم فقط روي SQL Server 2005 , 2008 جواب ميده.

من عمل paging نمي خواهم انجام بدهم فرض کنيد يک ميليون رکورد دارم کوئري من فقط 100 رکورد نتيجه رگرداند نه کل بانک جستجو کند براي سرعت بيشتر

S_O_S1982
سه شنبه 26 آبان 1388, 15:21 عصر
نه. Select TOP n فقط n ركورد اول را بر مي گرداند و Select TOP n PERCENT فقط n درصد از كل ركوردها را از ابتداي Result set بر مي گرداند. با اين روش نميشه n درصد بعدي را select كرد.

البته روشي كه دوستمون NanShekari (http://barnamenevis.org/forum/member.php?u=16657) گفتند هم فقط روي SQL Server 2005 , 2008 جواب ميده.

من روشی می خوام که روی 200 هم جواب بده ،
کسی راه حلی داره ؟؟

Ebrahim Asadi
سه شنبه 26 آبان 1388, 15:37 عصر
من روشی می خوام که روی 200 هم جواب بده ،
کسی راه حلی داره ؟؟

منظورتون رو متوجه نميشم. اگه قصد داريد كه 200 ركورد اول رو برگردونه مي توني از SELCT TOP استفاده كني:

SELECT TOP 200 FROM TABLE1

S_O_S1982
سه شنبه 26 آبان 1388, 23:45 عصر
منظورتون رو متوجه نميشم. اگه قصد داريد كه 200 ركورد اول رو برگردونه مي توني از SELCT TOP استفاده كني:

ببخشید بجای اینکه بنویسم 2000 ، نوشتم 200 ، منظورم هم ورژن 2000 بود ، گفتین که این روش رو 2005 و 2008 اجرا میشه

Ebrahim Asadi
چهارشنبه 27 آبان 1388, 08:21 صبح
سلام
در SQL 2000 مي توني از روش زير استفاده كني:
1- يك temp TABLE ايجاد كن. يك فيلد Id كه از نوع INT و IDENTITY است تعريف كن. بقيه فيلدهاي اين temp TABLE بايد مشابه فيلدهايي باشد كه مي خواهي در SELECT نهايي داشته باشي.
2- با دستور INSERT INTO نتيجه SELECT را در temp TABLE بريز.
3- از جدول temp فقط page مورد نظر را SELECT كن. (شرطهاي paging را روي فيلد Id جدول temp اعمال كن)
4- با دستور DROP TABLE جدول temp را حذف كن.


-------------------------------------------
DECLARE @PageNumber INT
DECLARE @PageSize INT

-------------------------------------------
SET @PageNumber = 1
SET @PageSize = 3

-------------------------------------------
CREATE TABLE #tempTable
(
tempId INT IDENTITY(1, 1),
tempName NVARCHAR(50)
)

-------------------------------------------
INSERT INTO
#tempTable (tempName)
SELECT
LastName
FROM
Employees

-------------------------------------------
SELECT
tempId,
tempName
FROM
#tempTable
WHERE
tempId BETWEEN ((@PageNumber - 1) * @PageSize + 1) AND (@PageNumber * @PageSize)

-------------------------------------------
DROP TABLE #tempTable
-------------------------------------------

spicirmkh
پنج شنبه 28 آبان 1388, 08:25 صبح
خود ريختن اطلاعات توي فايل Temp زمان زيادي مي برد از دستور Select Top n که راحتر است
من مي خواهم کل بانک پيمايش نکند يعني توي 10 ميليون رکورد فقط 100 رکورد نتيجه جستجو بدهد و ادامه جستجو قطع کند

[quote=Ebrahim Asadi;850600]سلام
در SQL 2000 مي توني از روش زير استفاده كني:
1- يك temp TABLE ايجاد كن. يك فيلد Id كه از نوع INT و IDENTITY است تعريف كن. بقيه فيلدهاي اين temp TABLE بايد مشابه فيلدهايي باشد كه مي خواهي در SELECT نهايي داشته باشي.
2- با دستور INSERT INTO نتيجه SELECT را در temp TABLE بريز.
3- از جدول temp فقط page مورد نظر را SELECT كن. (شرطهاي paging را روي فيلد Id جدول temp اعمال كن)
4- با دستور DROP TABLE جدول temp را حذف كن.

Ebrahim Asadi
پنج شنبه 28 آبان 1388, 08:39 صبح
سلام
اون جواب سوال آقاي S_O_S1982 (http://barnamenevis.org/forum/member.php?u=75068) بود. شما بايد از Select Top 100 استفاده كني. اگه Select بدون شرط باشه MS SQL نياز به پيمايش نداره اما اگه WHERE داشته باشي بايد همه ركوردها پيمايش بشن و شرط، روي آن ها چك بشه. بهتره براي فيلدهايي كه در WHERE استفاده مي كني، ايندكس بذاري.