SqlServer自定义函数

SqlServer自定义函数

参考了前辈lanxingbudui的文章SQL server 自定义函数FUNCTION的使用_sqlserver function-CSDN博客

1. 创建及调用自定义函数

1.1 标量值函数 (返回一个值)

-- 创建
CREATE FUNCTION function_name(@参数名 参数类型)  --传参,可空
RETURNS 返回值类型   --返回值的数据类型
AS
BEGIN
  函数体 
  RETURN  表达式;
END
--调用
select dbo.函数名([参数]) [需要获取的返回值名称]

举例:

--人员表
create table person (
	id int primary key identity(1, 1),
	name nvarchar(20)
)
insert into person values ('小明')

创建函数

--根据人员id获取名字
create function function_GetNameById(@id int)
returns nvarchar(20)
as 
begin
	declare @returnName nvarchar(20)
	select @returnName = name from person where id = @id
	return @returnName
end
go

调用函数

select dbo.function_GetNameById(1) name

结果:
SqlServer自定义函数_第1张图片

1.2 表格值函数 (返回值为一个表格)

1.2.1 内联表格值函数

返回值为 select 的结果集
基本结构:

--创建
CREATE FUNCTION 函数名(@参数名 参数类型) 
RETURNS table    --返回一个表(固定写法)
AS
RETURN [SELECT语句]
--调用 
SELECT * FROM dbo.函数名([参数])

举例:

CREATE TABLE students_score(
	cname VARCHAR(10),
	course VARCHAR(10),
	score INT
)
INSERT INTO students_score VALUES('张三','语文',74);
INSERT INTO students_score VALUES('张三','数学',83);
INSERT INTO students_score VALUES('张三','物理',93);
INSERT INTO students_score VALUES('李四','语文',74);
INSERT INTO students_score VALUES('李四','数学',84);
INSERT INTO students_score VALUES('李四','物理',94);

创建函数

-- 根据姓名获取该学生的各科成绩
create function function_GetScoresByName(@name nvarchar(20)) 
returns table
as
return select * from students_score where cname = @name 

调用函数

select * from dbo.function_GetScoresByName('张三') 

结果:
SqlServer自定义函数_第2张图片

1.2.2 多语句表值函数

通过自定义的表结构返回表格值
基本结构:

--创建
CREATE FUNCTION 函数名(@参数名 参数类型) 
RETURNS @自定义表名 table (列1 列1类型, 列2 列2类型)    
AS
BEGIN
     INSERT INTO @自定义表名 (列1, 列2) VALUES (列1值, 列2值)
 RETURN  
END
--调用
SELECT * FROM dbo.函数名(参数)

举例:

CREATE TABLE students_score(
	cname VARCHAR(10),
	course VARCHAR(10),
	score INT
)
INSERT INTO students_score VALUES('张三','语文',74);
INSERT INTO students_score VALUES('张三','数学',83);
INSERT INTO students_score VALUES('张三','物理',93);
INSERT INTO students_score VALUES('李四','语文',74);
INSERT INTO students_score VALUES('李四','数学',84);
INSERT INTO students_score VALUES('李四','物理',94);

创建函数

-- 行转列成绩并作为自定义表格返回
create function function_GetAllScores()
returns @scores table (name nvarchar(20), 语文 int, 数学 int, 物理 int)
as 
begin
	insert into @scores 
		select cname as name,
		sum(case course  when '语文' then score else null end) as 语文,
		sum(case course  when '数学' then score else null end) as 数学,
		sum(case course  when '物理' then score else null end) as 物理
		from students_score
		group by cname
	return 
end

调用函数

select * from dbo.function_GetAllScores()

结果:
SqlServer自定义函数_第3张图片

2. 修改自定义函数

ALTER FUNCTION [函数名](@参数名 参数类型)
--以下同创建自定义函数
RETURNS ....

3. 删除自定义函数

DROP FUNCTION [函数名]

4. 查看自定义的函数

在数据库 / 可编程性 / 函数 中可以查看

5. 查看函数定义

exec sp_helptext [函数名]

你可能感兴趣的:(sqlserver,数据库)