PDA

View Full Version : اجرای یک داینامیک کواری در یک UserDefined Function



MajerajooyeKhallagh
یک شنبه 20 آبان 1386, 14:07 عصر
سلام دوستان عزیز
من یک UDF دارم که در آن کواری من به صورت داینامیک تولید میگردد و رشته نهایی تولید شده به صورت ترکیبی از اعداد و ارقام و یکسری علایم ریاضی میباشد مثلا در انتهای UDF یک چنین رشته ای تولید میگردد'(2+3*2/2)' که باید این رشته اجرا گردد و نهایتا یک عدد از طریق UDF برگردانده شود,میدانیم که نمی توانیم در داخل یک UDF از EXEC استفاده نماییم,پس چه کار باید انجام بدیم؟ اگر دوستان بتونن راهنماییم کنن بسیار سپاسگذار میشم.

MajerajooyeKhallagh
یک شنبه 20 آبان 1386, 15:40 عصر
دوستان خودم به همچنین چیزی رسیدم ولی حالا این .query متغیر قبول نمیکنه و باید حتما در آن یک String قرار داد


DECLARE @x XML
SET @x =''
SELECT @x.query('123*2')


به صورت زیر را نمیپذیرد:


DECLARE @x XML
SET @x =''
declare @f char(10)
set @f='123*2'
SELECT @x.query(@f)


لطفا راهنماییم کنید.

AminSobati
یک شنبه 20 آبان 1386, 23:29 عصر
دوست عزیزم،
تا جایی که من متوجه شدم هدف شما ارتباطی به متد query در xml نداره. شما از امکانات Dynamic TSQL باید استفاده کنین. این مقاله شاید کمکتون کنه:
http://barnamenevis.org/forum/showthread.php?t=57245

MajerajooyeKhallagh
دوشنبه 21 آبان 1386, 12:42 عصر
جناب آقای ثباتی ممنون از توجه جنابعالی
ولی من منظورم اجرای یک Dynamic TSQL در داخل یک UDF و برگرداندن یک عدد توسط UDF میباشد پس از اجرای Dynamic TSQL .چون نمی تونیم از EXEC در UDF استفاده کنیم نمیدونم چه جوری باید این Dynamic TSQL را در UDF اجرا کنم.اگر جنابعالی روشی را میدونید برای حل این مشکل , در اختیار بنده هم قرار بدید متشکرم میشم.
در ضمن نمیدونم که این دستور EXECUTE در SQL در دیتابیس Master کجا قرار داره (توی این دیتابیس گشتم ولی چیزی پیدا نکردم) تا با دیدن Source اون شاید بتونم راه حلی برای این مشکل پیدا کنم.
باز هم از توجه شما ممنونم

AminSobati
سه شنبه 22 آبان 1386, 00:17 صبح
- به چه علت حتما باید این کار در UDF انجام بشه؟
- دستور execute چیزی مثل SP یا View نیست که سورس داشته باشه.

MajerajooyeKhallagh
چهارشنبه 23 آبان 1386, 10:56 صبح
جناب ثباتی عزیز
نیاز هست که این فانکشن را در ویوهای مختلف اسفاده نماییم,به همین دلیل باید ان را به صورت یک فانکشن تعریف نماییم.به نظرم رسید که آن را CLR Function کنم,فکر میکنم اینجوری مشکل حل بشه

به هر حال از توجه جنابعالی سپاسگذارم

AminSobati
چهارشنبه 23 آبان 1386, 22:03 عصر
دوست عزیزم اصرار شما در استفاده از این روال به شکل UDF، از نظر روانشناسیه "اس کیو الی" این رو میرسونه که باید تعدادی ID پاس بشن داخل این تابع و یک فرایندی روی همه اونها انجام بشه! ;)
در بدترین حالت، میتونین یک حلقه (مثلا Cursor) درست کنین. اما لینکی که در پست سوم قرار دادم کمک میکنه بدون Cursor هم این کار رو انجام بدین. البته به احتمال زیاد نیاز به تغییر اون دارین. دیدنش خالی از لطف نیست