赞
踩
前言: 在SQL Server中不仅可以可以使用系统自带的函数(时间函数、聚合函数、字符串函数等),详情请见本人另一篇博文:SQL Server中的内置函数(超详细讲解),一次性全都掌握!,用户还可以根据需要自定义函数。与编程语法中的函数类似,Microsoft SQL Server用户定义函数接收参数、执行操作(如复杂运算)并将操作结果以值的形式进行返回。返回值可以是单个标量值或结果集。
用户自定义函数的类型:
1)创建标量值函数:用户定义标量函数返回在returns子句中定义的类型的单个数据值。对于内联标量函数没有函数体;标量值是单个语句的结果。对于多语句标量函数,定义在begin···end块中的函数体包含一系列返回单个值的Transact-SQL语句。返回类型可以是除text、ntext、image、cursor和timestamp外的任何数据类型。在returns子句中定义返回值的数据类型,并且函数的最后一条语句必须为return语句。
3)调用标量值函数:可以在Transact-SQL语句中,调用返回标量值(与标量表达式的数据类型相同)的用户定义函数。必须使用至少由两部分组成名称的函数来调用标量值函数,即架构名.对象名。
表格值函数就是返回table数据类型的用户定义函数,它分为内嵌表值函数和多语句表值函数。
1)内嵌表值函数:对于内嵌表值函数,没有函数主体;表是单个select语句的结果集。
2)多语句表值函数。
注:调用时可不需指定架构名。
1、相同点:
创建定义相同:
create function 函数名([传入的参数名称 传入参数的类型])
returns 返回值类型
as
2、不同点:
参数可以是常量、表中的某个列、表达式或其他类型的值,在函数中有三种类型的参数。
--创建函数
create function function_name(@parameter_name parameter_data_type)
--create function 函数名称(@形参名 参数的数据类型)
returns date_type --返回返回值的数据类型
[with encryption] --如果指定了 encryption 则函数被加密
as
begin
function_body --函数体(即 Transact-SQL 语句)
return 表达式
end
--调用函数
select 数据库名.所有者名.函数名(常量或@实参名)
例如:
--查询表记录
select * from student
--创建函数
use xsgl
go
create function Fun_name(@sname varchar(6))
returns varchar(6)
as
begin
declare @result_name varchar(6)
select @result_name = 姓名 from student where 学号 = @sname
return @result_name
end
--调用函数
select xsgl.dbo.Fun_name('s1') name;
--创建函数
create function function_name(@parameter_name parameter_data_type)
--create function 函数名称(@形参名 参数的数据类型)
returns table --返回一张表
[with encryption] --如果指定了 encryption 则函数被加密
as
return (一条SQL语句)
--调用函数
select * from 数据库名.所有者名.函数名()
--注意:调用时,可不指定数据库名、所有者名
特点:内联表格值函数支持在where子句中使用参数。
例如:
--创建函数
use xsgl
go
create function Fun_names(@sname varchar(6))
returns table
as
return select * from student where 姓名 = @sname
--调用函数
select * from xsgl.dbo.Fun_names('辛国年')
--select * from Fun_names('辛国年')
--创建函数
create function function_name(@parameter_name parameter_data_type)
--create function 函数名称(@形参名 参数的数据类型)
returns @Table_Variable_Name table(Column_1 culumn_type,Column_2 culumn_type)
--returns @表变量 table 表的定义(即列的定义和约束)
[with encryption] --如果指定了 encryption 则函数被加密
as
begin
函数体(即Transact-SQL语句)
return
end
--调用函数
select * from 数据库名.所有者名.函数名(常量或@实参名)
--注意:调用时,可不指定数据库名、所有者名
多语句表值函数跟内联表值函数都是表值函数,它们返回的结果都是table类型。多语句表值函数通过多条语句来创建table类型的数据。这里不同于内联表值函数,内联表值函数的返回结果是由函数体内的select语句来决定。而多语句表值函数,则是需要指定具体的table类型的结构。也就是说返回的table已经定义好要哪些字段返回。所以它能够支持多条语句的执行来创建table数据。
例如:
--创建函数
use xsgl
go
create function Fun_nameall()
returns @temp table(sName varchar(6),sAge int)
as
begin
insert into @temp (sName,sAge) values ('张三',23)
return
end
--调用函数
select * from xsgl.dbo.Fun_nameall()
--select * from Fun_nameall()
--格式:
alter function 函数名(参数)
returns table
as
return (一条SQL语句)
drop function 函数名
在编写自定义函数时我们需注意:
标量函数:
内联表格值函数:
多语句表值函数:
补充:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。