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

得到的结果集:

修改自定义函数

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

最新文章

  1. Kanzi编程基础2 - Kanzi节点读取和属性设置
  2. SGA(System Global Area)
  3. xampp 用phpmyadmin在页面上修改密码后,无法登陆,密码没问题
  4. UILabel 添加图片
  5. Write operations are not allowed in read-only mode (FlushMode.NEVER/
  6. oracle 统计语句 与常见函数的归纳(未完待续)
  7. quoit design(hdoj p1007)
  8. 使用命令行的方式操作hdfs
  9. Koa 框架介绍
  10. rman list 命令列举
  11. python算法
  12. 深入理解java虚拟机---JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)(十二)
  13. Prometheus Node_exporter 之 Network Netstat TCP
  14. ajax file upload 修改
  15. Markdown学习(一)
  16. A Simple Problem with Integers---poj3468线段树
  17. OAF 交互式列车 上一步 下一步的简单使用
  18. 团队项目之UML图设计
  19. C++和C#转换
  20. Mysql安装(win10 64位)

热门文章

  1. pageEncoding与contentType属性
  2. poj-1384 Piggy-Bank
  3. 【BZOJ 2555】SubString
  4. Swift 中的指针使用
  5. bzoj3224
  6. 【OpenJ_POJ C16D】Extracurricular Sports(构造,找规律)
  7. Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError
  8. Android Studio高级配置
  9. sax 解析 xml
  10. Jenkins 2.x版本修改启动端口号(Windows)