参考了前辈lanxingbudui的文章SQL server 自定义函数FUNCTION的使用_sqlserver function-CSDN博客
-- 创建
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
返回值为 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('张三')
通过自定义的表结构返回表格值
基本结构:
--创建
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()
ALTER FUNCTION [函数名](@参数名 参数类型)
--以下同创建自定义函数
RETURNS ....
DROP FUNCTION [函数名]
在数据库 / 可编程性 / 函数 中可以查看
exec sp_helptext [函数名]