نگاهی به برخی دستورات پر کاربرد در SQL Server
در این مقاله سعی
بر آن داریم تا تعدادی از دستورات پرکاربرد و مفید مانند If، Case و... را در
روالهای ذخیره شده مورد بررسی قرار دهیم. بسیاری از اوقات استفاده از
روالهای ذخیره شده نسبت به نوشتن دستوراتی که درون آن قرار دارد مفیدتر
است. زیرا روالهای ذخیره شده از نظر گرامری یکبار برای همیشه بررسی
میشوند و هرگاه آنها را فراخوانی کنیم دیگر سربار زمانیای که برای چک
کردن گرامر دستورات مورد نیاز است از میان برداشته میشود. همچنین برای
استفاده از تراکنشها استفاده از روالهای ذخیره شده گزینهی مناسبی به نظر
میرسد.
از اینرو استفاده
از آنها در برنامه نویسی بسیار رواج دارد و برای برنامههایی که بر روی
شبکه اجرا میشوند استفاده از روالهای ذخیره شده مؤکداً توصیه میشود.
در یک روال ذخیره
شده میتوانید از تمامی دستورات SQL، بدون هیچ محدودیتی استفاده کنید. مضاف
بر دستورات SQL میتوان از دستوراتی مانند ساختارهای کنترلی IF و CASE،
ساختارهای تکرار مانند WHILE و... استفاده کنید.
ممکن است بگویید
با توجه به اینکه برای کلیه موارد یاد شده در بالا در زبانهای
برنامهنویسی معادلی وجود دارد، چه الزامی است که از آنها در روالهای
ذخیره شده استفاده کرد. در جواب باید گفت که استفاده از این دستورات بسیاری
از اوقات باعث افرایش کارآیی شده و عمل انتقال میان برنامه و سرور بانک
اطلاعاتی را کاهش میدهد.
قبل از شروع به
بررسی دستورات مورد نظر، باید توجه داشته باشید که در این مقاله از پایگاه
داده Pubs که توسط SQL Server ارائه شده است استفاده میکنیم. همچنین کلیه
دستورات در SQL Server 2000 تست شده اند.
IF .. Else
منطق این ساختار
برای کلیه برنامه نویسان روشن است. از این ساختار هنگامی استفاده میکنیم
که بخواهیم در صورت برقراری شرایطی خاصی دستورات مورد نظر ما اجرا شوند و
در صورت عدم برقرار دستورات مربوطه اجرا نشوند.
فرم کلی:
IF
condition
BEGIN
Instructions
…
….
END
[ELSE
BEGIN
Instructions
…
….
END]
در قسمت
condition میتوانید از یک دستور SELECT و یا مقداری که به عنوان پارامتر
برای روال ارسال شده است استفاده نمود. روال زیر را در نظر بگیرید:
CREATE PROCEDURE
test AS
IF (SELECT
AVG(price)
FROM titles WHERE type =
'mod_cook') < $15
BEGIN
PRINT ' mod_cook
books are very good'
END
ELSE
PRINT 'Average
title price is more than $15.'
GO
در این روال
بررسی میانگین price مربوط به نوع mod_cook با عدد 15 دلار پیام لازم را با
دستور PRINT چاپ میکنیم. با اجرای روال خروجی زیر را مشاهده میکنید.
mod_cook books are very good
این بدان معناست
که در روال فوق میانگین محاسبه شده بیشتر از 15 دلار بوده است. اکنون در
این روال اندکی تغییرات اعمال میکنیم.
CREATE PROCEDURE
test AS
IF (SELECT
AVG(price)
FROM titles WHERE type =
'mod_cook') < $15
BEGIN
SELECT titles
FROM titles
WHERE type =
'mod_cook'
END
ELSE
PRINT 'Average
title price is more than $15.'