函数

175 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天

一、函数分类

SQL Server 中提供的函数可分为两类:系统函数、用户定义函数。

image.png

二、系统函数

 

三、用户定义函数介绍

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、鼠标操作

①展开指定“数据库”节点,展开“可编程性”节点。

②右击“函数”节点,选择“新建”命令。

③选择要创建的函数类型后,再添加代码即可。

image.png 2、SQL语句

格式:CREATE FUNCTION

 

 

五、执行用户定义函数

可以在查询或其他语句及表达式中调用用户定义函数,也可用EXECUTE 语句执行标量值函数。

(1)在查询中调用用户定义函数:

   ① 可以在SELECT语句的列表中使用。

   ② 可以在WHERE或HAVING子句中使用。

(2)赋值运算符(left_operand=right_operand)可调用用户定义函数,以便在指定为右操作数的表达式中返回标量值。

 

六、修改用户定义函数

1、鼠标操作

①展开“数据库”结点,展开“可编程性”和“函数”结点

②右击需要修改的函数,选择“修改”命令,在窗口中进行修改即可。

image.png 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 学生

image.png 九、用户定义表值函数****

用户定义表值函数可分为内联表值函数和多语句表值函数。函数返回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

image.png 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')

image.png