开发者社区> 老朱教授> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

SQL Server编程(02)自定义函数

简介:
+关注继续查看

在编程过程中,我们通常把特定的功能语句块封装称函数,方便代码的重用。我们可以在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('2000-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 + '%'
)

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

在创建的过程中遇到一点疑问表值函数不能包含begin…end这样的语句块,只能用return返回table此处存疑

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

select * from dbo.getUser('admin')

得到的结果集:

image

 

修改自定义函数

使用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


本文转自齐师傅博客园博客,原文链接:http://www.cnblogs.com/youring2/p/4916400.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
外网访问内网WampServer
本地安装了一个WampServer,只能在局域网内访问,怎样从外网也能访问到本地的WampServer呢?本文将介绍具体的实现步骤。 1. 准备工作 1.1 安装并启动WampServer 默认安装的WampServer端口是80。
1255 0
06.SQLServer性能优化之---数据库级日记监控
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 之前说了一下数据库怎么发邮件:http://www.cnblogs.com/dunitian/p/6022826.html 不清楚的最好看一下,一会要用到。
647 0
2. SQL Server数据库状态监控 - 错误日志
原文:2. SQL Server数据库状态监控 - 错误日志 无论是操作系统 (Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯现场及原因。
1134 0
Borland® AppServer™ v6.7
http://techpubs.borland.com/am/appserver/v67/
454 0
+关注
3545
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载