بازيابی N ركورد جديد با استفاده از يك query New Page 1



ساير




 

 

 

SAKHA RAVESH CO.

 ا مروز

 چهارشنبه  6  ارديبهشت  1396  2017  Apr.  26   Wendesday ToDay
صفحه اصلی  مقالات نکته هادايره المعارف خودآموزها | تازه ها خود آزمون ها    
  نسخه قابل چاپ  

    5 4 3 2 1 

 عنوان

 نويسنده

  مشاهده

 تعداد آراء

 امتياز

 بازيابی N ركورد جديد با استفاده از يك query

 مديريت وب

11897

10

4.5

با توجه به جایگاه داده در عصر حاضر و  لزوم نگاه جامع به این مقوله مهم ، بر آن شدیم تا محوریت فعالیت های خود را بر  روی این موضوع متمرکز نمائیم . از این رو گروه فابک با شعار فناوری اطلاعات برای کسب وکار شکل گرفت و  خدمات خود  را از طریق  سایت www.fabak.ir  به مخاطبان محترم عرضه می نماید

 

بازيابی N ركورد جديد با استفاده از يك  query 

بازيابی N ركورد جديد با استفاده از يك  query 

در زمان پياده سازی برنامه های وب ، ممکن است به مواردی برخورد نمائيم که می بايست به تعداد مشخصی از جديدترين رکوردهای درج شده در يك بانک اطلاعاتی دستيابی و  آنان را بر روی يک صفحه وب نمايش دهيم. مثلا" يک وب سايت خبری ممکن است دارای يک جدول بانک اطلاعاتی باشد ( مثلا"  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

موارد استفاده از  TOP و  ROWCOUNT 
در صورتی كه از 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 @ ركورد

در صورتی كه از يك 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



جستجو

مقالات                 
دايره المعارف       
دوره های آموزشی


 

 

مشاهده گروه ها



              

 

 تهيه شده در شرکت سخا روش -  1382