SQL?Server?2000?允许用户创建自定义函数,自定义函数可以有返回值。?
自定义函数分为:标量值函数或表值函数?
如果?RETURNS?子句指定一种标量数据类型,则函数为标量值函数。可以使用多条?Transact-SQL?语句定义标量值函数。? 如果?RETURNS?子句指定?TABLE,则函数为表值函数。? 表值函数又可分为:内嵌表值函数(行内函数)或多语句函数?
如果?RETURNS?子句指定的?TABLE?不附带列的列表,则该函数为内嵌表值函数。? 如果?RETURNS?子句指定的?TABLE?类型带有列及其数据类型,则该函数是多语句表值函数。
标量值函数示例
代码如下:
CREATE?FUNCTION?dbo.Foo() RETURNS?int AS BEGIN declare?@n?int select?@n=3 return?@n END
内嵌表值函数示例?
代码如下:
CREATE?FUNCTION?dbo.Foo() RETURNS?TABLE AS return?select?id,?title?from?msgs
内嵌表值函数只有一个?select?语句。?
多语句表值函数示例(部分)?
代码如下:
CREATE?FUNCTION?fn_FindReports?(@InEmpId?nchar(5)) RETURNS?@retFindReports?TABLE?(empid?nchar(5)?primary?key, empname?nvarchar(50)?NOT?NULL, mgrid?nchar(5), title?nvarchar(30)) ...
语法格式:
????CREATE?FUNCTION?<函数名称> ???????????????( ????????????????--?函数的参数(可以多个) ????????????????<@param1,?sysname,?@p1>?<data_type_for_param1,?,?int>, ????????????????<@param2,?@p2>?<data_type_for_param2,?char> ???????????????) ??????????????RETURNS ??????????????<@表变量名>??TABLE ??????????????( ???????????????--?返回的虚拟表中的字段??字段名?类型 ???????????????<Column_1,?c1>?<Data_Type_For_Column1, ???????????????<Column_2,?c2>?<Data_Type_For_Column2,?int> ??????????????) ??????????????AS ??????????????BEGIN ????????????????????--?函数体,里面可以定义一些变量,总之最后返回的应该是个结果集 ??????????????RETURN ??????????????END
??????????????GO
?
写法(工作中的例子):
??? CREATE?FUNCTION?getcallbackdata ?(@mycallerno?varchar(30), ??@myid?int ?) RETURNS?@callbdata?TABLE ?( ?callerarea?varchar?(10), ?status?int, ?route?int, ?prefix?varchar(20), ?pcell?int, ?prate?money, ?prov?varchar(20)?NULL ?) AS ?BEGIN DECLARE?@arecode??varchar(10), ?@status?int, ?@route?int, ?@prefix?varchar(20), ?@pcell?int, ?@prate?money, ?@prov?varchar(20)
select?@arecode=areacode?from?sd_areaplay select?@status=state??from?sd_account?where?pin='@mycallerno' select?@prefix=prefix?from?sd_platformrouter select?@pcell=feesec,@prate=afterfreefee?from?sd_payplan insert?into?@callbdata?values(@arecode,@status,@route,@prefix,@pcell,@prate,@prov); RETURN?? END
GO
?
调用方法:
?
??select?callerarea,status,route,prefix,pcell,prate,prov?from?t.getcallbackdata('mycallerno',mypid)
实际上,使用自定义函数还是很简单的!
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|