PDA

View Full Version : سوال: ? User Defined Aggregate Function



Tooradj_O
چهارشنبه 17 خرداد 1391, 10:51 صبح
سلام بر دوستان بخصوص جناب امین ثباتی عزیز
من احتیاج دارم که بتونم خودم یه Aggregate Function بنویسم که از قبل موجود نیست. تمام مطالب موجود سایت راجع به این موضوع را مطالعه کردم ولی مشکلم حل نشد. بطور مثال:
http://barnamenevis.org/showthread.php?17811-Aggregate-Text-Function-For-Grouping&highlight=aggregate
و همینطور منابع موجود روی نت رو هم بررسی کردم ولی متاسفانه متوجه راه حل نشدم و نتونستم پیادش کنم.
http://msdn.microsoft.com/en-us/library/ms182741.aspx
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=124575
واسه همین احتیاج به راهنمایی دارم وحدالامکان یه کد نمونه، مثلا کد تابع SUM چون کد من هم خیلی شبیه به آن است (من می خوام اعداد برگشتی توسط یک select را باهم or منطقی کنم"|")
با سپاس فراوان

حمیدرضاصادقیان
چهارشنبه 17 خرداد 1391, 13:01 عصر
سلام.
شما دقیقا صورت مسئله رو توضیح بدید که چکاری میخواد انجام بشه تا بشه راهکار مورد نظر رو ارائه داد.

Tooradj_O
چهارشنبه 17 خرداد 1391, 13:17 عصر
شما دقیقا صورت مسئله رو توضیح بدید که چکاری میخواد انجام بشه تا بشه راهکار مورد نظر رو ارائه داد.

آقا با تشکر منکه عرض کردم : من می خوام اعداد برگشتی توسط یک select را باهم or منطقی کنم"|" منتهی در یک دستور select چون به یک دیتاست وصله و در ضمن دینامیکی هم ساخته می شود.

baktash.n81@gmail.com
چهارشنبه 17 خرداد 1391, 17:37 عصر
سلام

البته اینکه بتونیم یه Agregate function بنویسیم خوبه ... اما در مورد مشکل شما راه حل دیگه ای هم وجود داره ... مقادیر Bit رو به صورت int با هم جمع کنید اگه بزرگتر مساوی 1 شد ... که جواب True یعنی حتما یکی از رکوردها مقدار True داشته اگه هم صفر شد False می شه ...

Select case Sum(Cast(isactive as int)) when 0 then 'False' else 'True' end from users

baktash.n81@gmail.com
چهارشنبه 17 خرداد 1391, 17:43 عصر
البته اگه هنوز اسرار دارید که یک Aggregate Function بنویسید ... این نکته رو بدونید که باید از CLR استفاده کنید. یعنی یه تابع برای انجام عملیات مورد نظر بنویسید در یه زبان برنامه نویسی مثل C# بعد به عنوان یه Dll کامپایل کنید و به عنوان یه CLR Function تو SQL ازش استفاده کنید ... البته من خودم این کارو نکردم چون احتیاجی نداشتم اما این لینک بهتون بسیار کمک می کنه ... مثال های خوبی داره ...

http://msdn.microsoft.com/en-us/library/ms131056.aspx

یا برای این جستجو کنید

Invoking CLR User-Defined Aggregate Functions

Tooradj_O
شنبه 20 خرداد 1391, 10:22 صبح
با تشکر

مقادیر Bit رو به صورت int با هم جمع کنید اگه بزرگتر مساوی 1 شد ... که جواب True یعنی حتما یکی از رکوردها مقدار True داشته اگه هم صفر شد False می شه ...
فیلد من عددیه، یک عدد دسیمال نه حتی باینری

در یه زبان برنامه نویسی مثل C#‎ بعد به عنوان یه Dll کامپایل کنید و به عنوان یه CLR Function تو SQL ازش استفاده کنید
از توجهتون سپاسگذارم
راجع به این راه حل نظری ندارید؟ http://msdn.microsoft.com/en-us/library/ms182741.aspx

baktash.n81@gmail.com
شنبه 20 خرداد 1391, 15:10 عصر
خوب لینک شما هم همین روش رو میگه ... اگه دقت کنید ...

EXTERNAL NAME assembly_name [ .class_name ]



این خط جایی هست که شما dll و کلاس استفاده شده توش رو مشخص می کنید.