1、1实验 5 存储过程和触发器一、实验目的1 理解存储过程的概念、了解存储过程的类型2 掌握创建存储过程的方法3 掌握执行存储过程的方法4 理解触发器的功能及工作原理。5 掌握创建、更改、删除触发器的方法。二、实验内容1、使用不带参数的存储过程(1)创建一个存储过程,查询 person 表中所有不重复的职称。(使用以前的数据库的一切数据)语句:Create proc proc_prof As Select distinct prof from person;(return)结果:(2)执行存储过程语句:exec proc_prof结果:22、带输入参数的存储过程(1)创建一个存储过程,按照姓名查
2、询 person 表中的员工信息。语句:Create proc proc_personpname varchar(10)AsSelect *from person where pname=pnamereturn结果: (2)执行存储过程,查询名为黎明的员工数据语句:Exec proc_person黎明结果: 3、带输入/输出参数的存储过程(1)创建一个存储过程,使其能够根据员工姓名,查询员工工资。 (考虑到员工不存在时给出提示信息)Create proc proc_psalarypname varchar(10)AsIf EXISTS(Select pname from personWhere
3、 person.pname=pname)BeginSelect distinct pname,fact from person,salaryWhere person.pname=pnameAnd person.pno=salary.pnoEndelse3Print查无此人信息(2)执行存储过程存在时:语句:exec proc_psalary不存在时:4、使用触发器(1)创建一个触发器 trig_update,返回对 person 进行更新操作后,被更新的记录条数语句:create trigger trig_update on personafter updateasprint Trigger
4、Output + convert(varchar(5),rowcount) + rows were updated.结果:(2)执行触发器语句:use employee.sql goupdate personset deptno=003 where pname=王辉结果:(3)修改触发器 trig_update,除返回被更新的记录条数外,再返回学生的所有基本信息语句:alter trigger trig_update on person4after updateasprint Trigger Output + convert(varchar(5),rowcount) + rows were u
5、pdated.select * from personreturn结果:5、使用触发器的两个特殊表:插入表(inserted)和删除表(deleted ) 。(1)在 person 上创建触发器 ins_del_sample,在插入、删除或更新操作后,分别从 inserted 表和deleted 表中查询员工所有信息。(请同学们在做删除操作时,注意备份)语句:create trigger ins_del_sample on personafter insert,update,deleteasselect * from insertedselect * from deletedreturn结果:
6、操作 1 插入语句:use employee.sql goinsert into person values(000010,周杰伦,男, 1982-4-7,高级 ,001);结果:操作 2 删除语句:use employee.sql godelete from personwherepno=000004结果:5操作 3 更新:语句:use employee.sql goupdate person setdeptno=002 where pname=王琳结果:(2)执行触发器。思考执行插入、删除和更新操作后返回的表有什么区别?答:进行插入操作后,inserted 返回的是增加的行的内容,dele
7、ted 返回的是空内容进行更新操作后,inserted 返回的是更新行的新内容,deleted 返回的是更新行之前的内容进行删除操作后,inserted 返回的是空内容,deleted 返回的是删除的行的内容6、使用系统存储过程查看触发器(与存储过程的使用类似)(1)显示触发器 trig_update 的一般信息语句:exec sp_help trig_update结果:6(2)显示触发器 trig_update 的源代码语句:exec sp_helptext trig_update结果:(3)显示 person 上所有的依赖关系语句:exec sp_depends person结果:(4)显示触发器 trig_update 所引用的对象语句:exec sp_depends trig_update结果: