存储+事物
---------------------------------------------------------------
--3、给定科目名称、考这门课的次数、还有这门课的总分和平均分
创建储存过程
create proc sp_subName
@subname varchar(50)
as
select count(*) '课程次数',sum(r.StudentResult) '课程总分',avg(r.StudentResult) '平均分' from Subject as sb
inner join Result as r on sb.SubjectNo=r.SubjectNo
where SubjectName=@subname
使用储存过程,给定的值Java logic
exec sp_subName 'Java logic'
删除储存过程
drop proc sp_subName
----------------------------------------------------
--as
--if(not @Score between 0 and 100)
-- begin
-- RAISERROR('请输入0~100之间的数字',16,1)
-- return --返回
-- end
--改定两个参数,课程名称和,考试及格成绩,得出最近一次达不到分数线的学生信息
create proc sp_subname_RAISERROR
@subname varchar(50) 声明变量
@score decimal(5,2) 声明变量
as
if(not @Score between 0 and 100) 判断输入成绩是否在0-100之间
begin
RAISERROR('请输入0~100之间的数字',16,1) 如果不在就提示
return --返回 否则就返回,重新输入
end
上述条件成立就查表
select*from Student where StudentNo in(
select StudentNo from Result where ExamDate in(
select max(ExamDate) from Subject as sb
inner join Result as r on sb.SubjectNo=r.SubjectNo
where SubjectName=@subname and r.StudentResult<@score))
使用存储,给定的值'Java Logic' ,60
exec sp_subname_RAISERROR 'Java Logic' ,60
-------------------------------------------------
储存+事物+判断进阶
--将要增加的课程数据作为输入参数
--新增的课程编号作为输出参数
--增加记录的执行结果作为返回值
--先检查和增加学期记录,后增加课程记录
--1、创建存储过程,声明参数
--2、--判断课程名称和年级名是给定的值是否存在
--3、--开启事务
--4、--判断输入的年级名是否存在,如果不存在就新增一个,然后得到年级编号,如果存在,就根据年级名查出编号,并赋值
--5、得到新增的课程编号
--6、判断error的值,是要回滚还是提交事务,如果回滚,则返回0,提交返回-1
--7、赋值、调用
create proc sp_gradeinsert
@subName varchar(50), --课程名称 输入
@classHour int=36 ,--课时 输入
@gradeName varchar(50),--年级名 输入
@subno int output, --输出
@gradeid int output --输出
as
if(len(@subName)=0 or len(@gradeName)=0) --len长度
begin
return -1 --返回-1
end
begin tran --开启事务
if NOT exists(select*from Grade where GradeName=@gradeName) --判断是否存在gradename
begin
insert into Grade(GradeName) values(@gradeName) --不存在就添加
select @gradeid=GradeId from Grade where GradeName=@gradeName --之后查询获取gradeid
end
else
begin
select @gradeid=GradeId from Grade where GradeName=@gradeName --已存在就获取gradeid
end
declare @error int
insert into Subject(SubjectName,ClassHour,GradeId) values(@subName,@classHour,@gradeid)
set @error=@error+@@ERROR
set @subno=@@IDENTITY --存储上一次新增的数据的自增id
if(@error<>0)
begin
rollback tran --回滚
return 1
end
else
begin
commit tran --提交事务
return 0
end
declare @subno int
declare @gradeid int
declare @n int
查看带参数视图
exec @n=sp_gradeinsert 'java lll22',default,'Y4',@subno output,@gradeid output
if(@n=-1)
begin
print '请输入科目名和年级名'
end
else if(@n=1)
begin
print '插入失败'
end
else if(@n=0)
begin
print '插入成功'
print '课程编号:'+convert(varchar(50),@subno)+'号,新插入的科目id为:'+convert(varchar(50),@gradeid)
end
删除储存过程
drop proc sp_gradeinsert


浙公网安备 33010602011771号