--1.在数据库studentcourse中创建存储过程。存储过程名为proc_1,
if exists(select name from sysobjects where
name='proc_1' and type='p')
drop procedure proc_1
go
create proc proc_1
@stsno varchar(6)
as
select s.学号,s.姓名,s.性别,SC.成绩,SC.课程号,c.课程名 from s
,sc,c where s.学号=@stsno and SC.学号=s.学号 and SC.课程号=c.课程号
go
execute proc_1 J0401
--2.在数据库studentcourse中创建存储过程,存储过程名为proc_2,
if exists (select name from sysobjects where
name='proc_2' and type='p')
drop procedure proc_2
go
create proc proc_2
@cno varchar(10)
as
select c.课程号,c.课程名,s.学号,s.姓名,s.系,
s.性别 from s,c,sc where s.学号=SC.学号 and
SC.课程号=c.课程号 and c.课程号=@cno
go
execute proc_2 c01
--3.在数据库studentcourse中创建触发器,触发器名为trigger_1,
if exists (select name from sysobjects where
name='trigger_1' and type='tr')
drop trigger trigger_1
go
create trigger trigger_1
on c after insert,update,delete
as begin
print ('课程表被修改了')
end
go
update c set c.学分=5 where c.课程号='c03'
--4.在数据库studentcourse中创建触发器,触发器名为trigger_2,
if exists (select name from sysobjects where
name='trigger_2' and type='tr')
drop trigger tirgger_2
go
create trigger trigger_2
on c
after delete
as begin
declare @cno char(7)
select @cno=deleted.课程号 from deleted
delete sc where sc.课程号=@cno
end
go
--5.在数据库studentcourse中创建触发器,触发器名为trigger_3
if exists (select name from sysobjects where
name='trigger_3' and type='tr')
drop trigger trigger_3
go
create trigger trigger_3
on c
after update
as begin
update sc
set 课程号=(select 课程号 from sc)
where 课程号 in(select 课程号 from c)
end
6.创建向课程数据表C添加新记录的存储过程cadd。
if exists(select name from sysobjects where
name='cadd' and type='p')
drop procedure cadd
go
create procedure cadd
@cno char(3),@cname varchar(20),
@socre smallint,@prcno char(3),
@teacher char(8)
as
begin
insert into C(课程号,课程名,学分,预选课程号,教师)values(@cno,
@cname,@socre,
@prcno,@teacher)
end
go
exec cadd 'C06','C#',7,'C01','黎明'
select * from c
7.创建修z丈课程数据表C扒L录的存储过程cupdate
if exists(select name from sysobjects where
name='cupdate' and type='p')
drop procedure cupdate
go
create procedure cupdate
@cno char(3),@cname varchar(20),
@socre smallint,@prcno char(3),
@teacher char(8)
as begin
update c set 课程号=@cno,
课程名=@cname,学分=@socre,
预选课程号=@prcno,教师=@teacher
end
go
8. 创建存储过程cdeleted,要求删除课程数据表C中指定课
程号的记录。
if exists(select name from sysobjects where
name='cdeleted' and type='p')
drop procedure cdeleted
go
create procedure cdeleted
@cno char(3)
as begin
delete from c where c.课程号=@cno
end
go
9.创建存储过程avgc,查询指定课程的平均成绩,
如果平均成绩大于80分,则返回状态代码1;否则,返回状态代码2。
if exists(select name from sysobjects where
name='avgc' and type='p')
drop procedure avgc
go
create procedure avgc
@cno char(3),@back smallint output
as begin
select @back=AVG(SC.成绩) from SC
where SC.课程号=@cno
if(@back>80)
return 1
else
return 2
end
go
exec avgc c01,1
10.显示存储过程cupdate的参数,数据类型.
存储过程源代码和存储过程相关的数据库对象。
sp_help 'cupdate'
11.在数据库studentcourse中建立一个名为LOOK_g的存储
过程,用于检索指定课程不及格的学生的姓名与学号。
if exists(select name from sysobjects where
name='LOOK_g' and type='p')
drop procedure avgc
go
create procedure LOOK_g
@cno char(6)
as begin
if exists(select s.姓名,s.学号 from
s,SC where s.学号=SC.学号 and SC.成绩<60)
select s.姓名,s.学号 from s,SC
where s.学号=SC.学号 and SC.成绩<60
else
print '没有不及格学生'
end
12.将存储过程cupdate的名称改为course_update,
删除LOOK_g存储过程。
sp_rename cupdate,course_update
go
drop procedure LOOK_g
13. 定义一个存储过程,查询数据库中指定同学各门功课的
成绩。显示时按照课程号顺序显示。
create procedure LOOK
@name char(6)
as begin
select s.姓名,c.课程号,SC.成绩 from SC,s,c
where s.学号=SC.学号 and SC.课程号=c.课程号 and
s.姓名=@name
group by c.课程号,s.姓名,SC.成绩
end
go
exec lOOK @name='李丽'
14.在学生选课数据库中,建立触发器c1_trigger,当向
学生选课数据表SC中添加一条记录时,要求新记录的课程号值在
课程数据表C中存在,如果不存在,则拒绝向
学生选课数据表SC添加这条记录。
create trigger c1_trigger
on sc after insert
as begin
if(select count(*)from inserted join c on inserted.课程号=c.课程号)=0
begin
rollback tran
print '插入无效'
end
end
15.在学生选课数据库中,建立触发器c2_trigger,
修改课程数据表C中的课程号的值,该字段在学生选课数据表
SC中的值也相应修改。
create trigger c2_trigger
on c after update
as begin
update sc
set 课程号=(select 课程号 from inserted
where 课程号 in(select 课程号 from deleted))
end
go
16.在学生选课数据库中,建立触发器c3_trigger,删除课程
数据表C中的一条记录,如果该条记录的课程号值在学生选课数
据表SC中存在,则不允许删除;否则可以删除。
create trigger c3_trigger
on c for delete
as begin
if exists (select * from deleted c where
c.课程号 in(select sc.课程号 from sc))
begin
raiserror('不可删除',16,1)
end
end
17.删除c3_trigger触发器。
drop trigger c3_trigger
18. 创建一触发器c4_trigger,如果修改、删除和插入学生选
课数据表SC中的任何数据
,则将向客户显示一条信息“不得对数据表进行任何修改!”
If exists(select name from sysobjects
where name='c4_trigger' and type='tr')
drop trigger c4_trigger
go
create trigger c4_trigger
on sc for insert,update,delete
as begin
raiserror('不得对数据表进行任何修改',16,10)
end