Sqlserver 自定义函数 Function使用介绍

2020-07-04 05:59:00易采站长站整理

一.FUNCTION:
在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 

同点:
1.创建定义是一样的: a, CREATE FUNCTION F_NAME(传入的参数名称 传入参数的类型) b,RETURNS 返回值类型 c,AS 异点:1.标量函数返回的是一个数据类型值,内联表值函数返回的是一个table,而多语句返回的是一个table的变量(类似前面两个的结合);
2.语法的结构:标量函数和多语句函数都是要有begin,,,end,内联表值函数就没有;
3.调用:标量函数要写成在dbo,function_name;

标量函数,利用上篇文章写的数据表,在[T_员工信息]表中查姓名为李异峰员工的工号:


USE SQL_SYSTEM
GO
CREATE FUNCTION F_GONGHAO(@XINGMING NVARCHAR(5))
RETURNS INT
AS
BEGIN
DECLARE @GONGHAO INT
SET @GONGHAO =(SELECT Y.工号 FROM[T_员工信息] AS Y WHERE Y.姓名 =@XINGMING )
RETURN @GONGHAO
END
GO
/*上面是标量函数的一个简单的例举,下面就开始调用,注意是在dbo.下*/
SELECT [姓名] FROM[T_员工信息] WHERE [姓名]='李异峰' /**对比的查询*/
/*请注意观察,和对比*/
SELECT [姓名],DBO.F_GONGHAO ('李异峰')AS 工号 FROM[T_员工信息] WHERE [姓名]='李异峰'
GO

F5下:

内联表值函数:他返回的可是一个table哦,比如:筛选出2014.2.28号所有员工的打卡记录:


USE SQL_SYSTEM
GO
CREATE FUNCTION F_DAKAJILU(@RIQI DATE)
RETURNS TABLE
AS
RETURN(
SELECT* FROM[T_考勤]AS K WHERE K.日期 =@RIQI
)
GO
/*需要注意的就是他的写法上没有begin+end*/
/*下面就是将date带入函数中*/
SELECT*
FROM [F_DAKAJILU]('2014/02/28')
GO

F5:

多语句表值函数就是,表值函数+内联表值函数综合版:就写个返回当天打卡记录和涉及员工的个人信息:


USE SQL_SYSTEM
GO
CREATE FUNCTION F_D_DAKAJILU(@RIQI DATE)
RETURNS @TEMP_TABLE TABLE( /*这里要注意的就是既然是多语句的话,那你就要告诉计算机你要查询的列是哪些*/
[姓名]NVARCHAR(5) NOT NULL,
[工号]INT NOT NULL,
[职位]NVARCHAR(10) NOT NULL,
[部门]NVARCHAR(5) NOT NULL,
[是否夜班]NCHAR(1) NOT NULL,
[日期]DATE NOT NULL,
[当天上班时间]FLOAT(1)NOT NULL
)
/*以上就是要告诉计算机你要的一个基本信息列*/
AS
BEGIN
INSERT INTO @TEMP_TABLE /*这句的意思是将下面的查询结果插入到@TEMP_TABLE变量中去*/
相关文章 大家在看