实验五 存储过程和触发器的定义和使用

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五存储过程和触发器的定义和使用

实验内容:

1.在学生成绩数据库中建立表,并相应的导入数据

create database学生成绩

use学生成绩

create table student(学号char(6)not null,

姓名char(8)not null,

性别bit not null,

出生日期smalldatetime,

专业名char(10),

所在系char(10),

联系电话char(11)null)

create table course(课程号char(3)not null,

课程名char(20)not null,

教师char(10),

开课学期tinyint,

学时tinyint,

学分tinyint not null)

create table sc(学号char(6)not null,

课程号char(3)not null,

成绩smallint)

2.

(1)全局变量

(2)if语句

(3)循环语句

declare@i int,@sum int,@count int

set@i=1

set@sum=0

set@count=0

while (@i<100)

begin

if(@i%3=0)

begin

set@sum=@sum+@i

set@count=@count+1

end

set@i=@i+1

end

print'总和为:'+convert(varchar(10),@sum)

print'个数为:'+convert(varchar(10),@count)

declare@i1int,@s1int

set@i1=1

set@s1=0

beg:

if(@i1<=5)

begin

set@s1=@s1+@i1

set@i1=@i1+1

goto beg

end

print@s1

(4)waitfor 语句

waitfor delay'00:00:05'

select*

from student

go

waitfor time'10:20'

exec update_all_stats

(5)case语句

①select学号,

性别=

case性别

when'1'then'男'

when'0'then'女'

end

from student

go

②select学号,

成绩=

case

when成绩IS NULL then'未考'

when成绩<60 then'不及格'

when成绩>=60 and成绩<70 then'及格'

when成绩>=70 and成绩<90then'良好'

when成绩>=90 then'优秀'

end

from sc

3.存储过程

(1)create proc proc1

as

select学号,课程号

from sc

where成绩between 60 and 80

go

exec proc1

(2)

①create proc proc21(@学号char(10))

as

delete成绩

from sc

where学号=@学号

go

②create proc proc22(@学号char(6),@课程号char(3),@成绩smallint)

as

insert into sc

values(@学号,@课程号,@成绩)

go

(3)create proc proc3

(@学号char(6),@课程号char(3),@成绩smallint output)

as

select@成绩=成绩

from sc

where学号=@学号and课程号=@课程号

go

declare@成绩smallint

exec proc3'020101','101',@成绩output select'成绩'=@成绩

(4)

create proc proc_t1(@专业名称char(10))

as

select专业名,student.学号,姓名,course.课程号,course.课程名,成绩,学分

from student,sc,course

where专业名=@专业名称and student.学号=sc.学号and sc.课程号=course.课程号go

exec proc_t1'信息管理'

go

(5)

alter proc proc_t1(@专业名称char(10))

as

select专业名,student.学号,姓名,course.课程号,course.课程名,成绩,学分

from student,sc,course

where专业名=@专业名称and student.学号=sc.学号and sc.课程号=course.课程号

and student.性别=1

go

exec proc_t1'信息管理'

go

(6)drop proc proc_t1

(7)

create proc proc7(@课程名char(10))

as

begin

select课程名,

sum(case when成绩between 0 and 59 then 1 else 0 end)as'0-60分', sum(case when成绩between 60 and 79 then 1 else 0 end)as'60-79分', sum(case when成绩between 80 and 89 then 1 else 0 end)as'80-89分', sum(case when成绩between 90 and 100 then 1 else 0 end)as'90-100分' from sc,course

where课程名=@课程名and sc.课程号=course.课程号

group by课程名

end

go

exec proc7'英语'

go

4.

(1)create trigger tri_sc_insert on sc

after insert

as

begin

declare@sno char(6)

select@sno=inserted.学号

from inserted

相关文档
最新文档