数据库SQLServer实验六T-SQL语句的编程


一、实验目的

  • 掌握程序中的批处理、脚本和注释的基本概念和使用方法;
  • 掌握流程控制语句的基本语法;
  • 能够熟练使用这些流程控制语句;
  • 熟练掌握$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'

文章作者: 保底不歪抽早柚
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 保底不歪抽早柚 !
评论
  目录