PDA

View Full Version : نوشتن فاکشن؟؟؟؟



DataMaster
پنج شنبه 05 بهمن 1385, 20:30 عصر
سلام
من دستورات زیر رو میخوام داخل یه فانکشن که یه جدول بر میگردونه بذارم اما مشکل دارم
لطفا یع بررسی کنید و راهنمایی فرمایید


Declare @ServiceID Int,
Declare @TypeID smallint
Declare @TableName Varchar(20)
Declare @Query NVarchar(1000)
Select @TableName=TypeTable From ServiceType Where TypeID=@TypeID
Set @Query='SELECT '+@TableName+'.CustomerID, Customers.Name
FROM '+@TableName+' INNER JOIN
Customers ON '+@TableName+'.CustomerID = Customers.CustomerID
Where '+@TableName+'.ServiceID='+Cast(@ServiceID as Varchar)
exec sp_executesql @Query

zerobit-ltd
جمعه 06 بهمن 1385, 11:33 صبح
از دستور execute داخل تابع، فقط می توان برای اجرای Extended Stored Procedure ها استفاده کرد.
جسارتا به نظر من می تونید به جای function از stored procedure استفاده کنید.

DataMaster
جمعه 06 بهمن 1385, 19:22 عصر
تبدیل به SP کردم اما بلد نیستم توی دستور select ازش استفاده کنم همش error میگیرم

ali_kolahdoozan
جمعه 06 بهمن 1385, 21:39 عصر
فانکشنهایی که جدول بر میگردوند نوع خروجی خاصی دارند چیزی که شما نوشتید درست نیست . به جای سوال برید سراغ books on line خود sql خیلی سریعتر به جواب میریسد

DataMaster
جمعه 06 بهمن 1385, 22:06 عصر
فانکشنهایی که جدول بر میگردوند نوع خروجی خاصی دارند چیزی که شما نوشتید درست نیست . به جای سوال برید سراغ books on line خود sql خیلی سریعتر به جواب میریسد
اولین مرجع همیشه Book Online استفاده میکنم ولی این دفعه ذهنیتی نسبت به مساله ندارم

ali_kolahdoozan
جمعه 06 بهمن 1385, 22:07 عصر
یک صورت روشن از سواات بده تا بهت بگم . من این بالایی رو نفهمیدم

AminSobati
جمعه 06 بهمن 1385, 23:56 عصر
سلام
من دستورات زیر رو میخوام داخل یه فانکشن که یه جدول بر میگردونه بذارم اما مشکل دارم
لطفا یع بررسی کنید و راهنمایی فرمایید


Declare @ServiceID Int,
Declare @TypeID smallint
Declare @TableName Varchar(20)
Declare @Query NVarchar(1000)
Select @TableName=TypeTable From ServiceType Where TypeID=@TypeID
Set @Query='SELECT '+@TableName+'.CustomerID, Customers.Name
FROM '+@TableName+' INNER JOIN
Customers ON '+@TableName+'.CustomerID = Customers.CustomerID
Where '+@TableName+'.ServiceID='+Cast(@ServiceID as Varchar)
exec sp_executesql @Query



1) "کاما" در سطر اول اضافی هستش
2) در سطر یکی مانده به آخر، وقتی طول varchar رو مشخص نکنید، 1 در نظر گرفته خواهد شد
3) داخل فانکشن، SP نمیشه Call کرد
4) اگر این کد رو به SP تبدیل کنید، ازش Select نمیشه انجام داد

راه حل پیشنهادی:
میشه این کد رو داخل SP قرار بدین اما قید Select کردن از اون رو بزنین. به هر حال نتیجه رو به شما برمیگردونه. اگر الزاما باید ازش Select بگیرید و شرطهای دیگه ای اعمال کنید دو راه حل وجود داره:
1) خروجی این SP رو به جدول موقتی بریزید و ازش Select بگیرید
2) خود شرطی که در Select نهایی دارید بعنوان String به داخل SP پاس کنین و از ابتدا با Select مورد نظر کار کنید