به عنوان یک تعریف ساده از دستورات شرطی می توان گفت که با این دست از دستورها می توان وجود یا عدم شرطی را بررسی کرده و بر اساس مثبت یا منفی بودن خروجی ارزیابی و بررسی شرط، با توجه به نیاز، عملیاتی را انجام داد. اغلب دستور طوری نوشته می شود که پس از ارزیابی، خروجی آن TRUE یا FALSE می شود. سپس بسته به نتیجه می توانید عملیات لازم را انجام دهید. یک شرط معمولا تا حد امکان ساده نوشته می شود تا برای برنامه نویس و مفسر کاملا واضح باشد. اگرچه مفسر هیچگاه اشتباه نمی کند و دچار سردرگمی نمی شود، با این حال امکان دارد در صورت بیش از حد پیچیده بودن شرط نتیجه ی پیشبینی نشده ارائه دهد.
در بخش های بعدی به کلیدواژه ها و فرمول هایی که T-SQL برای نوشتن عبارت های صریح و روشن ارائه می کند، خواهیم پرداخت. عبارت ها معمولا با یک واژه ی کلیدی آغاز می شوند و بلافاصله پس از آن خود عبارت قرار می گیرد.پس از عبارت، دستوری که با آن به مفسر اعلان می کنیم چه عملیاتی باید انجام دهد را مشخص می کنیم. نحوه ی کلی نگارش این دستور به شرح زیر می باشد:
Keyword Expression
Statement
بلوک دستور BEGIN...END
در چارچوب فرمول بالا به شما توضیح می دهیم کدام کلیدواژه را چرا و کجا باید بکار ببرید. پس از Expression در فرمول فوق، می توانید Statement را در یک خط مجزا و در پایین آن درج نمایید. این statement دستوری است که با برقراری شرط مشخص شده در if/when، اجرا می شود. اغلب لازم می شود که دستور اجرایی را در چند خط ادامه دهید (محدود به یک خط نخواهد بود).
به طور کلی، مفسر هر چیزی که پس از Statement در فرمول قرار می گیرد را یک واحد در نظر می گیرد (فقط آن بخشی از کد که بلافاصله پس از Expression درج می گردد). با بلاک کد به مفسر اعلان می کنیم که دستور ما یک مجموعه است که در چند خط ادامه دارد. بلاک کد یا مجموعه دستور در SQL، یک برنامه قابل اجرا است که کار مشخصی را انجام می دهد. کوچکترین بلاک اجرایی یک کد با واژه ی رزروی BEGIN آغاز می شود و به واژه ی کلیدی END ختم می شود. فرمول دستور شرطی به شکل زیر می باشد:
Keyword Expression
BEGIN
Statement Line 1
Statement Line 2
Statement Line n
END
اگر دستور تنها از یک خط کد تشکیل شده، باز هم می توان آن را در بلوک دستور و بین دو کلیدواژه ی BEGIN...END قرار داد، بدین صورت:
Keyword Expression
BEGIN
Statement
END
با استفاده از ترکیب دو کلمه ی رزرو شده ی BEGIN...END می توان خوانایی کد را بهبود بخشید، زیرا شروع و پایان دستور را به طور صریح مشخص و نشان گذاری می کند.
ساختار شرطی IF
همان طور که گفته شد، از دستورات شرطی برای اجرای دستورات معین در زمان وقوع و برقراری شرایط خاص استفاده می شود. با دستور شرطی IF می توان بررسی کرد آیا دستور درست است یا خیر. دستورات IF تنها زمانی اجرا می شود که شرط آن true باشد. نحوه ی کلی استفاده از آن به صورت زیر می باشد:
IF Condition
Statement
به هنگام نوشتن دستور شرطی IF، ابتدا یک عبارت Condition برای آن فراهم نمایید که پس از ارزیابی مقدار true یا false را تولید کند. برای ایجاد شرط (Condition)، می توانید از متغیر و یک عملگر مقایسه ای منطقی استفاده نمایید. پیش از اینکه مفسر دستور را اجرا کند، شرط را ارزیابی می کند. اگر نتیجه ی آن true بود، در آن صورت مفسر دستور (Statement) را اجرا می کند.
ساختار شرطی IF…ELSE
دستور شرطی IF که در بالا معرفی شد تنها برای زمانی مناسب می باشد که یک دستور داریم و می خواهیم در صورت برقراری شرط اجرا کنیم. اما اگر شرط اول درست نبود چی؟
مثال زیر را درنظر بگیرید:
ECLARE
@Number
As
Decimal
(6, 2);
SET
@Number = 258.4062;
IF SIGN(@Number) > 0
PRINT N
'The square root of 258.4062 is '
+
TRY_CONVERT(
varchar
(12), SQRT(@Number));
ELSE
PRINT N
'You must provide a positive number'
;
GO
ساختار شرطی CASE...WHEN...THEN
کلیدواژه ی CASE به عنوان یک عملگر شرطی ایفای نقش می کند. این واژه مقداری را در نظر گرفته و آن را ارزیابی می کند، سپس با توجه به مقدار، نتیجه ی خاصی را برمی گرداند.
فرمول استفاده از دستور شرطی CASE به شرح زیر می باشد:
CASE
Expression
WHEN
Value1
THEN
Result
WHEN
Value2
THEN
Result
WHEN
Value_n
THEN
Result
END
در مثال زیر، یک حرف که نشانگر دانش آموز است به عنوان مقدار ارائه گردیده است. اگر آن حرف M یا m باشد، رشته ای تحت عنوان Male ایجاد شده و به عنوان نتیجه برگردانده می شود. اگر حرف f یا F به عنوان مقدار ارائه گردید، در آن صورت رشته ی متنی Female به عنوان نتیجه بازیابی می شود:
DECLARE
@CharGender
Char
(1),
@Gender
Varchar
(20);
SET
@CharGender = N
'F'
;
SET
@Gender =
CASE
@CharGender
WHEN
N
'm'
THEN
N
'Male'
WHEN
N
'M'
THEN
N
'Male'
WHEN
N
'f'
THEN
N
'Female'
WHEN
N
'F'
THEN
N
'Female'
END
;
SELECT
N
'Student Gender: '
+ @Gender;
GO
ساختار شرطی CASE...WHEN...THEN...ELSE
اگر مقدار ورودی case برای ما قابل پیشبینی باشد (از قبل بدانیم چه مقداری در اختیار case قرار می گیرد)، در آن صورت با case..when قابل مدیریت می باشد. اما چنانچه مقدار ورودی چیزی غیر از مقدار مورد انتظار ما می باشد، در آن صورت آن را با else اداره می کنیم.
CASE
Expression
WHEN
Value1
THEN
Result
WHEN
Value2
THEN
Result
WHEN
Value_n
THEN
Result
ELSE
Alternative
END
دستور Else، عملا زمانی بکار می رود که هیچ یک از مقادیر مشخص شده در دستورات WHEN با عبارت تعریف شده در CASE در فرمول فوق همخوانی نداشته باشد (عبارتی که در CASE مشخص شده با هر یک از مقادیر مقایسه می شود و اگر با هریک منطبق بود نتیجه ی تعیین شده برای آن مقدار به عنوان خروجی بازیابی می شود. اگر هیچ یک از مقادیر مشخص شده در دستورات WHEN با Expression در فرمول بالا منطبق نبود، در آن صورت مقدار مشخص شده در Else به عنوان خروجی برگردانده می شود).
چنانچه مقداری غیر قابل پیش بینی ارائه گردد، ولی دستور Else برای مدیریت آن در نظر گرفته نشده باشد، در آن صورت NULL به عنوان خروجی ارائه می گردد