SQLServer自定义函数学习

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, sysname, @p2> <data_type_for_param2, , char>
               )
              RETURNS
              <@表变量名>  TABLE
              (
               -- 返回的虚拟表中的字段  字段名 类型
               <Column_1, sysname, c1> <Data_Type_For_Column1, , int>,
               <Column_2, sysname, 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)

实际上,使用自定义函数还是很简单的!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值