实验六-存储过程和触发器(共5页).doc

上传人:飞****2 文档编号:14297834 上传时间:2022-05-03 格式:DOC 页数:5 大小:84.50KB
返回 下载 相关 举报
实验六-存储过程和触发器(共5页).doc_第1页
第1页 / 共5页
实验六-存储过程和触发器(共5页).doc_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《实验六-存储过程和触发器(共5页).doc》由会员分享,可在线阅读,更多相关《实验六-存储过程和触发器(共5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上实验六 存储过程和触发器一、目的与要求1. 掌握编写数据库存储过程的方法。2. 掌握建立数据库触发器的方法,通过实验观察触发器的作用和触发条件设置等相关操作。二、实验准备1. 了解编写存储过程和调用的T-SQL语法; 2. 了解触发器的作用;3. 了解编写触发器的T-SQL语法。三、实验内容(一) 存储过程在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号和课程名称,若院系不存在,返回提示信息。提示:D_Info表中存储了院系代码D_ID,而St_Inf

2、o表中学号字段St_ID的前两位与之对应,则D_Info表与St_Info表之间的联系通过这两个字段的运算构成连接条件。1. 分别执行存储过程getPractice,查询“法学院”和“材料科学与工程学院”的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号和课程名称。create procedure getPracticed_name varchar(30)asselect st_info.st_id,st_info.st_name,s_c_info.c_no,c_info.c_namefrom st_info,d_info,s_c_info,c_infowhere d_info.d_n

3、ame=d_name and st_info.st_id=s_c_info.st_id andd_info.d_id=left(st_info.st_id,2)and s_c_info.c_no=c_info.c_no and c_info.c_type=实践Goexec getPractice 法学院exec getPractice 材料科学与工程学院2. 利用系统存储过程sp_rename将getPractice更名为getPctStusp_rename getpractice,getPctStu3. 修改存储过程getPctStu,返回指定院系中参与实践课程的学生人次数,并利用该存储过程

4、以“法学院”为输入参数验证执行的结果alter procedure getPctStud_name varchar(30)asselect count(s_c_info.st_id)from s_c_info,c_info,d_info,st_infowhere d_info.d_name=d_name and st_info.st_id=s_c_info.st_id and d_info.d_id=left(st_info.st_id,2) and s_c_info.c_no=c_info.c_no and c_info.c_type=实践goexec getPctStu 法学院4. 再修改

5、存储过程getPctStu,返回指定院系中参与实践课程的学生人数。注:“人数”和“人次数”是不同的,对某一学生而言,如果参与了多门实践课程,则“人次数”是指其参与的课程门数,而“人数”仍为1。alter procedure getPctStud_name varchar(30)asselect count(distinct s_c_info.st_id)from s_c_info,c_info,d_info,st_infowhere d_info.d_name=d_name and st_info.st_id=s_c_info.st_id and d_info.d_id=left(st_inf

6、o.st_id,2)and s_c_info.c_no=c_info.c_no and c_info.c_type=实践 goexec getPctStu 法学院(二) 触发器1.在studentdb数据库中建立一个具有审计功能的触发器:触发器名为tr_sc,功能要求:审计在s_c_info表中对score字段的更新和插入操作,将这些操作记录到sc_log表中,sc_log表中有如下字段:操作类型type,学号st_id,课程号c_no,旧成绩oldscore,新成绩newscore,操作员uname,操作时间udate,其中操作员设定默认值为user,操作时间默认值为系统时间。create

7、table sc_log( type char(6), st_id char(8), c_no char(8), oldscore numeric(5,1), newscore numeric(5,1), uname varchar(20) default user, udate datetime default getdate()create trigger tr_sc on s_c_info for insert,updateasif update(score)begin if(select count(*) from deleted)0 insert into sc_log(type,s

8、t_id,c_no,oldscore,newscore) select update,i.st_id,i.c_no,d.score,i.score from inserted i ,deleted d where i.st_id=d.st_id and i.c_no=d.c_no else insert into sc_log(type,st_id,c_no,newscore) select insert,st_id,c_no,score from insertedend2. 在s_c_info表上建立一个触发器tr_updasc,用于监控对成绩的更新,要求更新后的成绩不能比更新前低,如果新成

9、绩低则取消操作,给出提示信息,否则允许更新。create trigger tr_updasc on s_c_infofor updateas declare newscore numeric(5,1),oldscore numeric(5,1) select newscore=score from inserted select oldscore=score from deleted if (newscoreoldscore) begin print(新成绩不能比旧成绩低!) rollback transaction end(三)查看存储过程和触发器的信息1.用sp_help查看以上建立的存储

10、过程和触发器的基本信息sp_help getPctStusp_help tr_updasc2. 用sp_helptext查看存储过程和触发器的代码sp_helptext getPctStusp_helptext tr_updasc四、思考与练习1存储过程如何加密?在创建存储过程的语句as前添加语句with encryption。2 触发器有什么好处和坏处?好处:触发器可以帮助系统监测数据的正确处理,同时,触发器可以作为完整性约束,辅助用户建立正确的数据表,保证数据的正确性。坏处:触发器要用的恰到好处,一个大型应用里,触发器越少越好,触发器会使编程时源码的结构被迫打乱,为将来的程序修改、源码阅读带来很大不便。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁