一、实验目的
- 掌握程序中的批处理、脚本和注释的基本概念和使用方法;
- 掌握流程控制语句的基本语法;
- 能够熟练使用这些流程控制语句;
- 熟练掌握$SQL$ $Server$用户定义函数的创建方法;
- 掌握创建触发器的方法;
- 掌握创建存储过程的方法.
二、实验内容
- 在示例数据库的学生基本信息表上如果存在出生时间在$1995$年以前的学生,给出这些学生的列表.否则给出一条提示信息,说明没有满足条件的学生.
create view studentbase
as
select Sno,Sname,Ssex,Sage,Sdept,2022-Sage 出生年份 from Student
if exists (select * from studentbase where 出生年份<1995)
begin
select * from studentbase where 出生年份<1995
end
else
print '无满足条件的学生'
- 显示所有系别为
计算机的学生信息,并且在显示之前,暂停$1$分钟.
waitfor delay '00:01:00'
select * from studentbase where Sdept='计算机'
- 创建一个函数,可以按学号查询学生选修课的平均成绩,如果不及格,显示其学号,姓名,并输出
该同学平均成绩不及格,否则输出全部通过
create function cj(@s_no char(10))
returns float
begin
declare @x float,@name char(20)
select @x=avg(grade) from sc where sno=@s_no
select @name=sname from student where sno=@s_no
return @x
end
if dbo.cj('202001008')<60
begin
select sno,sname from Student where sno='202001008'
print('该同学平均成绩不及格')
end
else print('全部通过')
- 创建一个触发器,当对学生表执行$UPDATE$操作时,该触发器被触发,不允许修改学生表中的学号.
create trigger update_sno on student
for update
as
begin
if update(sno)
begin
print('不允许修改学生表中的学号')
rollback transaction
end
end
update student set sno='95001' where sno='202001008'
- 创建一个存储过程,它带有一个输入参数,用于接受学号,显示该学生的姓名、选修课的课程名、成绩.
create proc p1(@s_no char(10))
as
begin
select sname,cname,grade from Student,Course,SC where sc.Cno=Course.Cno and sc.Sno=Student.Sno and sc.sno=@s_no
end
exec p1 '202001001'