实验13 存储过程与触发器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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姓名='张瑞芳'

相关文档
最新文档