携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天
一、函数分类
SQL Server 中提供的函数可分为两类:系统函数、用户定义函数。
二、系统函数
三、用户定义函数介绍
1、SQL Server 2008中用户定义函数可分为标量函数和表值函数两类,其中,表值函数可再分为内联表值函数和多语句表值函数。
2、函数名的命名规则
(1)有效字符:SQL函数名必须以一个字母(A~Z、a~z以及带可区别标记的字母以及非拉丁字母),“@”(at符),“#”(数字符)或“ -”(下画线)开头,跟在首字符后面的字符可以是字母(A~Z、a~z以及其他语言的任何字母符号)、数字(0~9以及其他语言的任何数字符号)、“@”(at符)、“$”(美元符)、“#”(数字符)或“_”(下画线)。并不是所有以“@”符号开头的对象就意味着它是一个局部变量,SQL Server有许多以“@@”开头的函数,例如:函数@@ERROR能返回最后执行的T-SQL语句的错误代码。
(2)有效长度:函数名的有效长度为1~128个字符。
(3)SQL Server的保留关键字不能用做函数名。
(4)嵌入的空格或其他特殊字符不能在函数名中使用。
四、创建用户定义函数介绍
1、鼠标操作
①展开指定“数据库”节点,展开“可编程性”节点。
②右击“函数”节点,选择“新建”命令。
③选择要创建的函数类型后,再添加代码即可。
2、SQL语句
格式:CREATE FUNCTION
五、执行用户定义函数
可以在查询或其他语句及表达式中调用用户定义函数,也可用EXECUTE 语句执行标量值函数。
(1)在查询中调用用户定义函数:
① 可以在SELECT语句的列表中使用。
② 可以在WHERE或HAVING子句中使用。
(2)赋值运算符(left_operand=right_operand)可调用用户定义函数,以便在指定为右操作数的表达式中返回标量值。
六、修改用户定义函数
1、鼠标操作
①展开“数据库”结点,展开“可编程性”和“函数”结点
②右击需要修改的函数,选择“修改”命令,在窗口中进行修改即可。
2、SQL语句
格式:ALTER FUNCTION
七、删除用户定义函数
1、鼠标操作
①展开“数据库”结点,展开“可编程性”和“函数”结点
②右击需要修改的函数,选择“删除”命令,在窗口中进行修改即可。
2、SQL语句
格式:DROP FUNCTION 函数名
八、用户定义标量函数(参数是单个数据)
注意:执行用户定义函数需要指出函数的所有者。DBO.函数名(参数)
例题:
USE 学生管理
GO
CREATE FUNCTION stu_pass_info (@grade int)
RETURNS char(8)
BEGIN
DECLARE @info char(8)
IF @grade>=550
SET @info='优秀'
ELSE
SET @info='合格'
RETURN @info
END
GO
select 学号,姓名,dbo.stu_pass_info(高考成绩) as 是否通过 from 学生
九、用户定义表值函数****
用户定义表值函数可分为内联表值函数和多语句表值函数。函数返回table数据类型。
1、创建内联表值函数
对于内联表值函数,没有函数主体,表是单个SELECT语句的结果集。语法格式如下:
CREATE FUNCTION[schema_name.]function_name
([{@parameter_name[AS][type_schema_name.]parameter_data_type
[=default]}
[,…n]
]
)
RETURNS TABLE
[WITH <function_option> [,…n]]
[AS]
RETURN[()select_stmt[]]
[;]
例题:
USE 学生管理
GO
CREATE FUNCTION stu(@stu_id char(12))
RETURNS TABLE
AS
RETURN (SELECT 学号,姓名,籍贯 from 学生 where 学号=@stu_id)
go
select * from dbo.stu('19401003')
go
2、创建多语句表值函数
多语句表值函数可以看作是标量函数与内联表值函数的结合。多语句表值函数允许在BEGIN…END语句块中定义一系列T-SQL语句,这些语句执行生成的信息将插入返回的表中。通过多次查询的方式,使数据实现筛选、叠加功能,语法格式如下:
CREATE FUNCTION[schema_name.]function_name
([{@parameter_name[AS][type_schema_name.]parameter_data_type
[=default]}
[,…n]
])
RETURNS @return_variable TABLE <table_type_definition>
[WITH <function_option>[,…n]]
[AS]
BEGIN
function_body
RETURN
END
[;]
例题:
USE 学生管理
GO
CREATE FUNCTION STU_dd(@stu_id as char(12))
RETURNS @credit TABLE
(
学号 char(12),
姓名 char(8),
课程号 char(20) ,
成绩 int
)
AS
BEGIN
INSERT @credit
SELECT 学生.学号,学生.姓名,成绩.课程号,成绩.成绩 FROM 学生,成绩
WHERE 学生.学号=成绩.学号 AND 成绩.成绩>=60 AND 学生.学号=@stu_id
RETURN
END
go
select * from dbo.STU_dd('19401003')