实验13 存储过程与触发器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验13 存储过程与触发器
1.实验目的
(1)掌握使用SQL Server管理平台和Transact-SQL语句创建存储过程、执行存储过程、修改存储过程、删除存储过程的用法。
(2)理解使用SQL Server管理平台和Transact-SQL语句查看存储过程定义、重命名存储过程的用法。
(3)掌握通过SQL Server管理平台和Transact-SQL语句创建、修改、删除触发器的方法和步骤。
(4)掌握引发触发器的方法。
2.实验内容及步骤
请先附加studentsdb数据库,然后完成以下实验。
(1)以下代码创建一个存储过程:
CREATE PROCEDURE grade_s
(@sid char(4),
@cid char(4))
AS
BEGIN
SELECT s.学号,s.姓名,g.课程编号,g.分数
FROM student_info s JOIN grade g ON s.学号=g.学号
WHERE s.学号=@sid AND g.课程编号=@cid
END
当grade_s执行时,输入数据0001、k002时,结果是学号为0001的学生的k002课程成绩。
(2)以下代码创建一个存储过程stu_g
CREATE PROCEDURE stu_g
@cid nchar(4)
AS
SELECT a.* FROM student_info a INNER JOIN grade b ON a.学号=b.学号
WHERE 课程编号=@cid
当stu_g执行时,输入数据‘k003’,结果是所有选修了k003的学生在student_info中的数据。
(3)设计一个存储过程get_stu完成这样的功能:输出所有学生的学号,姓名,
课程编号,课程名称和分数,并以学号升序、成绩降序显示。请编写程序实
现。
答:create procedure get_stu
as
begin
select a.学号,a.姓名,b.课程编号,c.课程名称,b.分数
from student_info a join grade b on a.学号=b.学号join curriculum c on b.课程编
号=c.课程编号
order by a.学号asc,b.分数desc
end
exec get_stu
(4)设计一个存储过程stu_course完成这样的功能:输出某个学生(学号参数为@sid)所修读课程的课程名称。编写并调用该存储过程,输出学号为'0003'
的学生所修读课程名称。
答:create procedure stu_course
@sid nchar(4)
as
begin
select c.课程名称
from grade b join curriculum c on b.课程编号=c.课程编号
where b.学号=@sid
end
exec stu_course'0003'
(5)设计一个存储过程stu_maxg完成这样的功能:使用OUTPUT参数(@maxg)输出某门课程(参数为@cid)最高分。编写调用该存储过程输出‘k001’课程最
高分的程序。
答:create procedure stu_maxg
@cid nchar(4),
@maxg decimal(4,1)output
as
begin
select top 1 @maxg=分数
from grade
where课程编号=@cid
order by分数desc
end
declare @maxg decimal(4,1)
exec stu_maxg'K003',@maxg output
select @maxg 最高分
(6)设计一个存储过程proc_modifyc完成这样的功能:修改某门课程(@cid)
的课程名称(@cname)和学分(@credit),编写并调用该存储过程,修改课程号
为’K003’的课程名称为‘数据库原理与应用’、学分为4。
答:create procedure proc_modifyc
@cid nchar(4),
@cname nchar(10),
@credit int
as
begin
update curriculum
set课程名称=@cname,学分=@credit
where课程编号=@cid
end
exec proc_modifyc'K003','数据库原理与应用',4
(7)复制student_info表命名为stu2,为stu2表创建一个触发器stu_tr,当对stu2表进行插入、修改时,激活该触发器,显示删除临时表与插入临时表。
--复制student_info(重定向)
答:select*into stu2
from student_info
--创建insert、update触发器
答:create trigger trigger_n
on stu2 after insert,update
as
begin
select*from deleted
select*from inserted
end
--插入一条数据(‘0009’,’张瑞芳’,’女’,’1995-11-11’,’广从大道13号’)观察inserted、deleted 临时表的变化
insert into stu2(学号,姓名,性别,出生日期,家庭住址)
values('0009','张瑞芳','女','1995-11-11','广从大道13号')
--更新数据,将学号为’0009’学生的姓名改为’张芮芳’,观察inserted、deleted临时表的变化
update stu2
set姓名='张苪芳'
where姓名='张瑞芳'