جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
بازيابي N ركورد جديد با استفاده از يك query
-(1 Body) 
بازيابي N ركورد جديد با استفاده از يك query
Visitor 502
Category: دنياي فن آوري
در زمان پياده سازي برنامه هاي وب ، ممکن است به مواردي برخورد نمائيم که مي بايست به تعداد مشخصي از جديدترين رکوردهاي درج شده در يك بانک اطلاعاتي دستيابي و آنان را بر روي يک صفحه وب نمايش دهيم. مثلا" يک وب سايت خبري ممکن است داراي يک جدول بانک اطلاعاتي باشد ( مثلا" NewsStoriesTable ) که براي هر خبري که تعر يف مي گردد يک رکورد را در جدول مربوطه اضافه مي نمايد . در صورتي که بخواهيم صرفا" ده خبر جديد موجود در بانک اطلاعاتي را بر روي صفحه اصلي سايت منتشر نمائيم ، از چه روش و يا روش هائي مي توان استفاده نمود؟ احتمالا" پيشنهاد مي نمائيد که از عبارت و يا دستور SELECT به صورت زير استفاده گردد :
SELECT * FROM NewsStoriesTable
روش فوق ، تمامي رکوردهاي موجود در جدول NewsStoriesTable را برمي گرداند ( نه صرفا" ده رکورد جديد موجود در بانک ) . در صورتي که بخواهيم صرفا" تعداد مشخصي از رکوردها را استفاده نمائيم ، مي بايست با استفاده از منطق برنامه نويسي عمليات فيلترينگ را انجام تا صرفا" N رکورد مورد نظر با عبور از فيلتر ايجاد شده شرايط موجود در برنامه را تامين نمايند.
آيا روش فوق گزينه اي منطقي است ؟ پاسخ به سوال فوق منفي است و براي بازيابي رکوردهاي موجود در بانک اطلاعاتي از مکانيزم هاي قدرتمند و مناسبي استفاده نشده است ، چراکه در ابتدا مي بايست تمامي رکوردهاي موجود در بانک پس از اجراي query مورد نظر برگردانده شده و در ادامه بر روي صفحه وب منتقل و با توجه به کد نوشته شده ، تعداد مشخصي از آنان را نمايش و يا ساير عمليات دلخواه را بر روي آنان انجام داد . بديهي است به موازات افزايش تعداد رکوردهاي موجود در بانک ، کارآئي روش فوق كاهش خواهد يافت .
از ديگر روش هاي موجود،استفاده از کليد واژه هاي TOP و ROWCOUNT در ارتباط با سرويس دهنده SQL است . با استفاده از کليد واژه هاي فوق مي توان تعداد رکورد برگردانده شده توسط اجراي يک query را محدود به تعداد مشخصي نمود . بدين ترتيب ، حجم اطلاعات بازيابي شده در اثر اجراي يک query کاهش يافته و امکان مشاهده آنان با صرف زمان مناسب فراهم مي گردد .
در ادامه با تمرکز برروي هر يک از کليد واژه هاي TOP و ROWCOUNT با نحوه استفاده از آنان بيشتر آشنا مي شويم .

اعمال محدوديت در بازيابي ركوردها با استفاده از TOP

کليد واژه TOP در SQL SERVER 7.0 معرفي و هدف آن ارائه روشي به منظور اعمال محدوديت در بازيابي نتايج حاصل از اجراي يك SELECT query مي باشد . با استفاده از TOP مي توان N ركورد جديد موجود در بانك را و يا X درصد از ركوردهاي جديد را بازيابي نمود . گرامر استفاده از TOP به صورت زير است :

SELECT TOP N select list
FROM TableName
 
'Example :
SELECT TOP 5  *
FROM authors

الگوي دوم

SELECT TOP X PERCENT select list
FROM TableName
'Example :
SELECT TOP 25 PERCENT au_lname, au_fname
FROM authors
WHERE zip = '92101'


در كد فوق ، N و X مي بايست داراي مقادير صحيح مثبت باشند و در صورتي كه از الگوي دوم استفاده مي گردد ، X مي بايست داراي مقداري بين صفر تا يكصد باشد .
استفاده از TOP ، باعث دستيابي به N ركورد جديد و يا X درصد از ركوردهاي جديد موجود در بانك اطلاعاتي مي گردد . معمولا" چنين درخواست هائي به همراه ORDER BY استفاده مي گردد . مثلا" براي برگرداندن ده ركورد و يا خبر جديد ، مي بايست از ORDER BY نبز به منظور مرتب سازي آنان بر اساس تاريخ درج در بانك اطلاعاتي ( PublicationDate ) استفاده گردد . كد زير نحوه انجام ابن كار را نشان مي دهد :

 SELECT TOP 10 NewsURL, ArticleTitle, ArticleAuthor FROM NewsStoriesTable
ORDER BY PublicationDate DESC


اعمال محدوديت در بازيابي ركوردها با استفاده از ROWCOUNT

قبل از SQL SERVER 7.0 ، تنها روش موجود براي اعمال محدوديت در بازيابي ركوردهائي که در اثر اجراي يك query برگردانده مي شوند ، استفاده از متغير ROWCOUNT بود که در ابتدا و قبل از اجراي هر گونه query مي بايست به آن يک مقدار عددي بزرگتر از صفر نسبت داده شود :
SET ROWCOUNT N
پس از مقداردهي متغير ROWCOUNT ، تمامي عبارات زيرمجموعه SQL موجود در حوزه ، صرفا" قادر به پردازش N رکورد خواهند بود . اکثر نسخه هاي جديد سرويس دهنده SQL همچنان امکان استفاده از ROWCOUNT را حمايت مي نمايند . بخاطر داشته باشيد که مقدار نسبت داده شده به متغير ROWCOUNT صرفا" در ارتباط با دستور SELECT اعمال نخواهد شد و دستورات و يا عبارات ديگري نظير INSERT , UPDATE و DELETE را نيز شامل مي شود . كد زير نحوه استفاده از ROWCOUNT به منظور بازيابي ده ركورد جديد موجود در جدول NewsStoriesTable را نشان مي دهد :

SET ROWCOUNT 10
SELECT NewsURL, ArticleTitle, ArticleAuthor
FROM NewsStoriesTable
ORDER BY PublicationDate DESC


در صورتي كه از SQL SERVER 6.5 و نسخه هاي قبل از آن استفاده مي گردد ، مجبور به استفاده از ROWCOUNT خواهيم بود چراكه در نسخه هاي فوق TOP معرفي نشده و امكان استفاده از آن وجود نخواهد داشت . به منظور استفاده از TOP مي بايست حداقل از نسخه SQL Server 7.0 استفاده گردد .
در صورتي كه از يك عبارت SELECT استفاده مي گردد و دقيقا" مشخص است كه چه تعداد ركورد را مي بايست بازيابي نمود ، پيشنهاد مي گردد كه از TOP استفاده گردد . TOP به منظور كار با عبارت SELECT طراحي شده است و داراي اثرات جانبي ROWCOUNT نمي باشد ( استفاده از آن در ارتباط با عباراتي به غير از SELECT و تاثير بر روي triggers ) .
براي عبارات ساده SELECT دليل خاصي براي استفاده از ROWCOUNT وجود ندارد ولي اگر قصد فراخواني يك Stored procedure را داريد كه يك SELECT را انجام مي دهد و عبارات ديگري را نيز پردازش مي نمايد ، در زمان استفاده از ROWCOUNT مي بايست اين اطمينان حاصل گردد كه مقدار نسبت داده شده به ROWCOUNT صرفا" در ارتباط با query مورد نطر بكارگرفته مي شود .
در اين رابطه يك حالت خاص وجود دارد كه ترجيح داده مي شود از ROWCOUNT در يك SELECT query در مقابل TOP استفاده گردد : زماني كه قصد داريد به پياده كننده صفحه وب اجازه دهيد كه تعداد نتايج برگردانده شده اجراي يك query را مشخص نمايند . مثلا" فرض كنيد داراي يك Stored procedure با نام getRecentArticles باشيم كه يك پارامتر عددي صحيح را با نام ResultCount @ از ورودي مي گيرد . در چنين مواردي Stored procedure مي بايست صرفا" به تعداد ResultCount @ ركورد جديد موجود در بانك را برگرداند( نه اين كه همواره ده ركورد را برگرداند ) . بدين ترتيب به پياده كندگان صفحات وب اجازه داده مي شود كه مشخص نمايند كه به چه تعداد ركورد جديد موجود در بانك مي توانند دستيابي داشته باشند . كد زير نحوه انجام اين كار را نشان مي دهد :

CREATE PROCEDURE getRecentArticles
(
@ResultCount int
)
AS
نوشتن queryمورد نظر براي برگرداندن ResultCount@ ركورد

موارد استفاده از TOP و ROWCOUNT

در صورتي كه از يك query پويا در stored procedure استفاده گردد ،‌ مي توان از TOP نيز استفاده نمود . روش استفاده از TOP در كد زير صحيح نمي باشد و در مقابل ، مي بايست به صورت پويا يك query را ايجاد و در ادامه با استفاده از EXEC و يا sp_executesql آن را اجراء نمود.

 

CREATE PROCEDURE getRecentArticles
(
  @ResultCount int
)
AS

SELECT TOP @ResultCount NewsURL, ArticleTitle, ArticleAuthor
FROM NewsStoriesTable
ORDER BY PublicationDate DESC


كد زير نحوه استفاده از ROWCOUNT در يك Stored Procedure و متناسب با پارامتر ورودي را نشان مي دهد :

CREATE PROCEDURE getRecentArticles
(
@ResultCount int
)
AS

SET ROWCOUNT @ResultCount

SELECT NewsURL, ArticleTitle, ArticleAuthor
FROM NewsStoriesTable
ORDER BY PublicationDate DESC


در صورتي كه قصد اعمال محدوديت در بازيابي ركوردهاي حاصل از اجراي دستورات INSERT ,UPDATE و يا DELETE را داشته باشيد ، مي بايست از ROWCOUNT استفاده گردد ،‌ چراكه TOP صرفا" در ارتباط با عبارت SELECT بكار گرفته مي شود.

جمع بندي

در اين مقاله ، با طرح اين پرسش كه نحوه بازيابي n ركورد جديد در يك بانك اطلاعاتي با استفاده از يك query به چه صورت است ، دو كليد واژه TOP و ROWCOUNT معرفي گرديدند . پس از آشنائي با گرامر هر يك از كليد واژه هاي فوق ،‌ آنان را با يكديگر مقايسه و در نهايت با جايگاه استفاده هر يك از آنان آشنا شديم .
منبع: http://www.4guysfromrolla.com
Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image