View Full Version : سوال: فرمت طراحی UDFها
  
Bahar_HS
چهارشنبه 25 فروردین 1389, 00:39 صبح
با سلام،
در طراحی UDFها،تابع تعریف شده یه سری پارامترهای ورودی داره و خروجی هایی،
اگه بخوایم تابعی تعریف کنیم که فقط پارامترهای ورودی داشته باشه_مثل دستور insert_
یا تابعی که رکوردهای یک جدول رو select می کنه و ورودی نداره، فرمت دستورش چطور میشه،من برای select،همچین تابعی نوشتم ،ولی SQL خطا می ده:
 
CREATE FUNCTION  Recycle_1 
RETURNS   TABLE
AS
BEGIN
Return Select  name , family  from  Table1 
where 
finish_day  is  NULL   and
finish_mounth  is NULL  and
finish_year  is NULL
END
 
:متفکر:
svahidm
چهارشنبه 25 فروردین 1389, 13:41 عصر
سلام 
اگه تابع باشه كه حتما خروجي داره ولي ميتونه ورودي نداشته باشه .براي بدون ورودي مي توني جلوي اسم تابع () بزاري
CREATE FUNCTION [ schema_name. ] function_name 
( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
    [ = default ] [ READONLY ] } 
    [ ,...n ]
  ]
)
RETURNS return_data_type
    [ WITH <function_option> [ ,...n ] ]
    [ AS ]
    BEGIN 
                function_body 
        RETURN scalar_expression
    END
[ ; ]
براي تابع بدون خروجي مي توني از Stored-procedure استفاده كني 
Bahar_HS
پنج شنبه 26 فروردین 1389, 00:08 صبح
با سلام وممنون از راهنمایی تون،
من لیست پارامترها رو خالی گذاشته بودم ولی از () استفاده نکرده بودم،
 
اما در مورد توابعی که ورودی دارند وخروجی ندارند،مثل دستورات ذخیره،ویرایش و حذف،
که وردی دارند ولی خروجی برنمی گردونن،چطور ؟
 
این دستورات در هر برنامه ای متفاوتند و من فکر می کردم که میشه توابع مربوط به اونها رو 
در بخش UDFها نوشت،
جلوی Return رو خالی گذاشتم ولی اشکال می گیره،
   باید چطور این دستورات رو بنویسم؟:متفکر:
Rejnev
پنج شنبه 26 فروردین 1389, 00:33 صبح
از stored Procs ها استفاده کن
معمولا موقعی از تابع استفاده میکنیم که بخوایم از اون در دستور select یا مقدار دهی متغیر استفاده کنیم
مثلا
select number,fPowerTwo(number)
from tbl
fPowerTwo یک تابع با یک پارامتر ورودی و یک خروجی هست.
البته توابع همیشه هم لازم نیست پارامتر داشته باشن ولی مقدار خروجی چرا(return)
----
با sp میشه چهار عمل اصلی insert update delete select رو انجام داد
پارامتر به sp بفرستید و طبق پارام ها دستور رو بنویسید و اجرا کنید. نیازی هم نیست خروجی پس بدید.
--for example
create proc myProc @code int as
begin
--some works like delete
   delete from tbl where code>@code;
--some select
   select * from tbl where code=@code
end
go
exec myProc 10
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.