函数

create function MaxVal (@a int, @b int) returns int as
begin
 if(@a > @b)
 begin
  return @a;
 end
 return @b;
end
go


select dbo.MaxVal(3,5);
go

print dbo.MaxVal(3,7);
go

declare @maxV int;
set @maxV = dbo.MaxVal(12,dbo.MaxVal(7,9));
print @maxV;
go

----创建存储过程,根据给定的学号,取得姓名和总成绩
create procedure GetNameAndScore @stuId varchar(10), @stuName nvarchar(20) output, @totalScore float output as
begin
 select @totalScore = Sum(b.SCORE) from TB_SCORES as b
  inner join TB_STUDENTS as a on a.STU_KEY=b.STU_KEY
 where a.stu_id = @stuId;

 select @stuName = STU_NAME from tb_students where STU_ID=@stuId;
end

go

declare @stuName nvarchar(20);
declare @totalScore float;

execute GetNameAndScore '20080103', @stuName output, @totalScore output;
print '姓名:' + @stuName + ' 总成绩:' + convert(nvarchar, @totalScore);
go

--使用标量函数实现根据给定的学号取得总成绩
create function GetTotalScore(@stuId varchar(10)) returns float as
begin
 declare @totalScore float;
 select @totalScore = Sum(b.SCORE) from TB_SCORES as b
  inner join TB_STUDENTS as a on a.STU_KEY=b.STU_KEY
 where a.stu_id = @stuId;

 return @totalScore;
end;
go

select dbo.GetTotalScore('20080103');
go

print dbo.GetTotalScore('20080103');
go

create view vw_highscores as
select tb_students.stu_id as 学号, tb_students.stu_name as 姓名, dbo.GetTotalScore(stu_id) as 总成绩
from tb_students;

go

select * from vw_highscores;
go

--创建内联表值函数,根据指定的学号返回姓名和总成绩
create function GetNameAndTotalScore(@stuId varchar(10)) returns TABLE as
return select a.STU_NAME as 姓名, b.totalScore as 总成绩 from TB_STUDENTS as a
 inner join
 (select STU_KEY, Sum(SCORE) as totalScore from TB_SCORES group by STU_KEY) as b
 on a.STU_KEY=b.STU_KEY
 where a.STU_ID=@stuId;
 
go

select * from dbo.GetNameAndTotalScore('20080102');
go

--创建多语句表值函数,根据指定的学号返回姓名和总成绩
create function GetNameAndTotalScore_2(@stuId varchar(10))
 returns @tbl TABLE (姓名 nvarchar(20) not null, 成绩 float not null) as
begin
 declare @totalScore float;
 declare @stuName nvarchar(20);
 
 select @totalScore = Sum(b.SCORE) from TB_SCORES as b
  inner join TB_STUDENTS as a on a.STU_KEY=b.STU_KEY
 where a.stu_id = @stuId;

 if(@totalScore is null)
 begin
  return;
 end

 select @stuName = STU_NAME from tb_students where STU_ID=@stuId;

 insert into @tbl (姓名,成绩) values (@stuName,@totalScore);
 return;
end

go
select * from GetNameAndTotalScore_2('20080102');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值