SQL——自定义函数

函数:函数是由一个或多个Transact-SQL语句组成的子程序。用户定义函数接受零个或多个输入参数,并返回标量值或表。
自定义函数的分类:
标量函数:返回值为单个的值
内联表值函数:返回值为可更新表
多语句表值函数:返回值为不可更新表

标量函数的定义和调用:
创建标量函数,计算指定课程号的课程的平均成绩,然后调用该函数查询某门课的平均成绩。

 create function Avg_degree(@cno char(6))
	returns float(1)   --返回值类型
	as
	begin
		declare @var float(1)
		select @var = AVG(degree)
		from score
		where cno = @cno
		return @var
	end
   select dbo.Avg_degree('3-105')

内联表值函数的创建和调用:
创建内联表值函数,查询指定学号的学生的选课情况(包括学号、姓名、课程号和成绩),然后调用该函数查询某位学生的选课情况,再调用该函数将该生某门课的成绩改为100,重新查询该生成绩检查一下改过来了吗。

create function select_course(@ssno char(5))
returns table
as
	return (select *
			from score
			where sno = @ssno)
go
select * from select_course('101')
update select_course('101')
set degree = 80
where cno = '3-105'

多语句表值函数的创建和调用:
创建多语句表值函数,查询指定课程号的学生的选课情况(包括学号、姓名和成绩),并将选了该课的学生成绩提高5分,然后调用该函数查询某门课的学生的选课及成绩修改情况。(之前先查询一下该课的成绩以便与调用函数后的成绩作对比。)相当于C语言中形参和实参的区别吧

create function select_student(@ccno char(6))
returns @st table
(
	sno char(5),
	sname char(10),
	degree float
)
as
	begin
	insert @st
	select student.sno, sname, degree = degree+5
	from student, score
	where student.sno = score.sno and cno = @ccno
	return 
	end
### 创建和使用SQL Server中的自定义函数 #### 定义与分类 在SQL Server中,用户能够创建多种类型的自定义函数以满足特定需求。这些函数主要分为两类:标量函数和表值函数[^2]。 #### 创建标量函数 标量函数返回单个据值。下面是一个简单的例子展示如何创建一个名为`AddNumbers`的标量函数: ```sql CREATE FUNCTION dbo.AddNumbers (@Num1 INT, @Num2 INT) RETURNS INT AS BEGIN RETURN (@Num1 + @Num2); END; ``` 此函数接收两个整作为输入参数并返回这两个值相加的结果。 #### 调用标量函数 一旦创建完成,就可以如同内置函数一般,在查询语句内调用自定义函数: ```sql SELECT dbo.AddNumbers(10, 20) AS Result; ``` 这会计算两者的总和并将结果命名为Result列显示出来。 #### 表值函数简介 除了标量函数外,还有更为复杂的表值函数,它能返回整个表格形式的据集而不是单一值。这里给出一个多条记录输出的例子——获取介于指定范围内的字列表: ```sql CREATE FUNCTION dbo.GetNumbers(@Start INT, @End INT) RETURNS TABLE AS RETURN ( WITH NumbersCTE(Number) AS ( SELECT @Start UNION ALL SELECT Number + 1 FROM NumbersCTE WHERE Number < @End ) SELECT * FROM NumbersCTE ); ``` 上述代码片段利用了公共表达式(Common Table Expression, CTE),通过递归方式构建了一个从起始到结束编号之间的序列。 #### 执行表值函数 对于表值函数,则可以通过FROM子句将其嵌入SELECT语句之中来进行调用: ```sql SELECT * FROM dbo.GetNumbers(10, 20); ``` 这条指令将会选取由GetNumbers产生的所有行。 #### 修改已有函数 如果需要更改已有的自定义函数逻辑而不删除重写的话,那么可以采用ALTER命令来实现更新操作。以下是修改表值函数的一般语法结构: ```sql ALTER FUNCTION dbo.YourFunctionName(/* 参数 */) RETURNS /* 返回类型 */ AS BEGIN -- 新增功能的具体实现... END; ``` 请注意实际应用时应替换为具体细节[^4]。 #### 查看现有函数定义 当想要查阅某个已经存在的函数是如何编写的时候,可借助系统存储过程sp_helptext来达成目的: ```sql EXEC sp_helptext 'dbo.FunctionName'; ``` 这样就能看到目标对象完整的T-SQL源码[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值