در نسخه 2012 جهت سهولت در مهاجرت پایگاه دادههای Access به SQL Server از توابع CHOOSE و IIF حمایت شده.
منتها تابع IIF چندان انعطاف پذیر نیست. مثلا اگر بخواهید به ازای چند حالت مشخص از دادههای یک فیلد یک مقدار را برگردانید مجبورید چند تابع IIF تودرتو بنویسید. تودرتو بودن این تابع هم به 10 سطح محدود میشه.
اما CASE قابلیتها و انعطاف پذیری بیشتری داره.
سوال میشه گاها کدام یک از این دو Performance یا کارایی بهتر دارد، در جواب میشه گفت هر دو برابر اند. در واقع IIF هنگام اجرا تبدیل به فرم CASE خواهد شد.
فرض کنید یک نظر سنجی تلوزیونی تنظیم کردیم که مردم از طریق پیامک نظر خودشان را به ما اعلام میکنند. شش گزینه هم داریم. برای انتخاب هر گزینه کافیست از اعداد 1 تا 6 استفاده کنیم. حال هنگام نمایش میخواهیم به جای اعداد مقدار متناظر ظاهر شود:
منتها تابع IIF چندان انعطاف پذیر نیست. مثلا اگر بخواهید به ازای چند حالت مشخص از دادههای یک فیلد یک مقدار را برگردانید مجبورید چند تابع IIF تودرتو بنویسید. تودرتو بودن این تابع هم به 10 سطح محدود میشه.
اما CASE قابلیتها و انعطاف پذیری بیشتری داره.
سوال میشه گاها کدام یک از این دو Performance یا کارایی بهتر دارد، در جواب میشه گفت هر دو برابر اند. در واقع IIF هنگام اجرا تبدیل به فرم CASE خواهد شد.
فرض کنید یک نظر سنجی تلوزیونی تنظیم کردیم که مردم از طریق پیامک نظر خودشان را به ما اعلام میکنند. شش گزینه هم داریم. برای انتخاب هر گزینه کافیست از اعداد 1 تا 6 استفاده کنیم. حال هنگام نمایش میخواهیم به جای اعداد مقدار متناظر ظاهر شود:
Use Tempdb Go CREATE TABLE [Sample] (value int); INSERT INTO [Sample] VALUES (1),(2),(3),(4),(5),(6); Go --simple CASE Expression SELECT value, CASE Value WHEN 1 THEN 'Very Bad' WHEN 2 THEN 'Bad' WHEN 3 THEN 'Not Bad' WHEN 4 THEN 'Good' WHEN 5 THEN 'Very Good' WHEN 6 THEN 'Excellent' ELSE NULL END AS [Result] FROM [Sample]; --CHOOSE Scalar Function SELECT value, CHOOSE(value,'Very Bad','Bad','Not Bad','Good','Very Good','Excellent') FROM [Sample]; --nested IIF Scalr Function SELECT value, IIF(value = 1, 'Very Bad', IIF(value = 2, 'Bad', IIF(value = 3, 'Not Bad', IIF(value = 4, 'Good', IIF(value = 5, 'Very Good', 'Excellent' ) ) ) ) ) FROM [Sample];