ورود

View Full Version : مشکل در کار با تابع IIF



Mohammadi_F
یک شنبه 06 اسفند 1385, 04:34 صبح
با سلام خدمت همگی.
من تو برنامه بخشی رو برای محاسبه دارم که محاسبات مربوط به برنامه رو انجام میده که همه اینها رو برای اجرای سریعتر بصورت StoreProcedure در SQLServer نوشتم . کد زیر قسمتی از یکی از این توابعه ، کل تابع وقتی از IIf استفاده می کنم بدون مشکل اجرا میشه ولی همینکه از IIf استفاده می کنم پیام خطا میده و میگه در نزدیکی "<" ایراد نوشتاری وجود داره. در صورتی که من در ویرایش قبلی برنامه همین کد رو در Access بخوبی اجرا کردم.


DECLARE sumofahyan_cursor CURSOR FOR
SELECT A.ParvandehNo, A.AYear, Sum(IIf(((A.AYear-A.YearBana) > 10),(0.5*MN.Nerkh*A.Ahyan),(MN.Nerkh*A.Ahyan)))
FROM [Shahrdari].[dbo].Ahyan A
INNER JOIN [Shahrdari].[dbo].Masaleh_Nerkh MN ON (A.AYear = MN.MYear)
AND (A.Masaleh = MN.Masaleh)
WHERE (((A.ParvandehNo)= @ParvandehNo) AND
((A.AYear)= @Year))
GROUP BY A.ParvandehNo, A.AYear
OPEN sumofahyan_cursor
FETCH NEXT FROM sumofahyan_cursor
INTO @ParvandehNo,@Year,@SumOfAhyan

Kamyar.Kimiyabeigi
یک شنبه 06 اسفند 1385, 07:41 صبح
میشه بگین منظورتون از عبارت محاسباتی که داخل SUM نوشتین چیه؟ (به BOL رجوع شود)

odiseh
یک شنبه 06 اسفند 1385, 13:41 عصر
سلام

1- SQL2000 که iif نداره
2- تازه اگرم داشته باشه، تعداد پرانتزهات برابر نیست

zerobit-ltd
یک شنبه 06 اسفند 1385, 14:59 عصر
تابع iif، جزو توابع t-sql نیست. یعنی از اون نمی شه داخل script ها استفاده کرد. این تابع فقط برای کار با Analysis Services هستش.
البته می تونید خودتون تابعی ایجاد کنید که براتون کار تابه iif رو انجام بده.

Mohammadi_F
یک شنبه 06 اسفند 1385, 20:03 عصر
سلام
ممنون از جوابهایی که دادید.
مگه SQL یک زبان استاندارد نیست ؟ یعنی SQL ای که توی اکسس استفاده میشه با SQLSERVER تفاوت داره ؟
بهر حال ممنون از توجهتون.

zerobit-ltd
دوشنبه 07 اسفند 1385, 10:44 صبح
سلام
ممنون از جوابهایی که دادید.
مگه SQL یک زبان استاندارد نیست ؟ یعنی SQL ای که توی اکسس استفاده میشه با SQLSERVER تفاوت داره ؟
بهر حال ممنون از توجهتون.
sql یه زبان استاندارد برای کار با پایگاه های داده ای رابطه ای هستش. ولی هر پایگاه داده، علاوه بر دستورات استاندارد sql، یه سری دستورات رو خودش اضافه می کنه تا کارا راحت تر انجام بشه.
transact sql زبان script نویسی برای کار با ms sql server هستش؛ pl/sql برای کار با oracle هستش.
مثلا transact sql فقط حلقه while رو پشتیبانی می کنه و pl/sql فقط حلقه for رو. در صورتی که تو زبان sql استاندارد، اصلا چیزی به اسم حلقه نداریم و دستوری برای ایجاد حلقه وجود نداره.
فکر می کنم access از همون sql استاندارد استفاده کنه.
تمام پایگاه های داده ها، از تمام دستورات sql استاندارد پشتیبانی می کنن. مثلا تو همشون، دستور ایجاد database، create database هستش. ولی تو برخی دستورات الحاقی، با هم متفاوت هستند.
نکته بعدی اینه که تابع iif که شما فرمودید، اصلا جز دستورات tranact sql نیست. اگر به bol رجوع کنید، می بینید که این تابع برای کار با Analysis Services هستش.