عنوان
|
نويسنده
|
مشاهده
|
تعداد
آراء |
امتياز
|
بازيابی N ركورد جديد با استفاده از يك query |
مديريت وب |
13239 |
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 می
بايست به آن يک مقدار عددی بزرگتر از صفر نسبت داده شود :
پس از مقداردهی متغير
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
|