ITPub博客

首页 > > > SQL Server学习之路(十八)—自定义函数

SQL Server学习之路(十八)—自定义函数

作者:liyue071714118 时间:2018-03-01 19:34:50 0 删除 编辑

在编程过程中,我们通常把特定的功能语句块封装称函数,方便代码的重用。我们可以在SQL Server中自定义函数,根据函数返回值的区别,我们自定义的函数分两种:标量值函数和表值函数。

自定义函数的优点:

  • 模块化程序设计

  • 更快的执行速度

  • 减少网络传输

一个函数最多可以有1024个参数;在调用函数时,如果未定义参数的默认值,则必须提供已声明参数的值。

创建标量值函数

下面的这个函数根据生日返回年龄:

create function dbo.calcAge(@birthday datetime)--函数名和参数
returns int    --返回值类型
as
begin
    declare @now datetime
    declare @age int
    set @now=getdate()    
    set @age=YEAR(@now)-YEAR(@birthday)    
    return @age    --返回值
end

执行这段脚本创建函数,创建成功之后,我们调用一下看看效果:

print dbo.calcAge('2018-1-1')

输出:15

注意:在调用自定义函数的时候,我们必须给出schema_name(架构名,此处是dbo),否则会提示“'calcAge' 不是可以识别的 内置函数名称。”

创建表值函数

顾名思义,表值函数的返回值不再是一个标量值,而是一个数据表;表值函数返回的表与其它数据表一样,可以进行join、where等操作。

create function getUser(@name nvarchar(50))returns table
as
return (    
    select 
        Id,UserName,[Status] 
    from 
        tb_user    
    where UserName like '%' + @name + '%'
    )

上面的代码完成了一个表值函数的创建。

可以将表值函数放在select语句中使用:

select * from dbo.getUser('admin')

得到的结果集:

 

修改自定义函数

使用alter语句修改自定义函数,下面的代码演示如何修改getUser函数:

alter function getUser    --指明要修改的函数名
(@status int)    --修改参数类型
returns table
as
return (    
    select 
        Id,UserName,[Status] 
    from 
        tb_user    
    where [Status]=@status
    )

 

删除自定义函数

使用drop语句删除:

drop function calcAge

另外更新了几本Oracle和Mysql的电子书到百度云盘了,有需要的可以点击菜单中的学习资料—>电子书即可看到下载地址,以后有好的电子书也会不定时更新进去,欢迎大家关注~

觉得文章写的不错请点个赞或转发到朋友圈,感谢您的支持~

长按识别二维码,
更多咨询早知道!



原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-12-10

  • 博文量
    1486
  • 访问量
    11405