西安财经学院 SQL 大型数据库管理系统 实验五创建存储过程和触发器
《数据库原理与应用》实验存储过程和触发器(部分答案)

实验6存储过程和触发器1.实验目的(1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。
(2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。
(3)掌握通过SQL Server管理平台和Transact-SQL语句ALTER PROCEDURE修改存储过程的方法。
(4)掌握通过SQL Server管理平台和Transact-SQL语句DROP PROCEDURE删除存储过程的方法。
(5)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。
(6)掌握引发触发器的方法。
(7)掌握使用SQL Server管理平台或Transact-SQL语句修改和删除触发器。
(8)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。
2.实验内容及步骤请先附加studentsdb数据库,然后完成以下实验。
(1)在查询设计器中输入以下代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示个小写字母。
语句:CREATE PROCEDURE letters_printASDECLARE@count intSET@count=0WHILE@count<26BEGINPRINT CHAR(ASCII('a')+@count)SET@count=@count+1ENDexec letters_print(2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。
语句:create proc stu_info@name char(10)asbeginSELECT姓名,g.课程编号,分数FROM dbo.student_info s JOIN grade gON s.学号=g.学号WHERE s.姓名=@nameEndexec stu_info'马东'(3)使用系统存储过程sp_rename将存储过程stu_grade更名为stu_g。
实验五:触发器和存储过程

实验五:触发器和存储过程一.实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。
二.实验内容:有一个小型的图书管理数据库,包含的表为:bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表borrowcard(cardid,ownername);--借书证表borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表写一个存储过程,实现借书操作,要求有事务处理。
(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。
(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。
(3)要求用触发器实现表的完整性控制。
三、操作与运行1.创建图书数据库:create table bookstore(bookid int not null primary key,bookname char(20),bookauthor char(20),purchasedate datetime,state char(4))create table borrowcard(cardid int not null primary key,ownername char(20))create table borrowlog(cardid int not null,bookid int not null,borrowdate datetime,returndate datetime,primary key(cardid,bookid),---foreign key(cardid)references borrowcard(cardid), ---foreign key(bookid)references bookstore(bookid) )通过以上语句,可以看到数据库中的表建立成功。
使用SQL语句创建触发器

使用SQL语句创建触发器
要使用SQL语句创建触发器,你可以按照以下语法格式编写CREATETRIGGER语句:
```
CREATE TRIGGER trigger_name
{BEFORE , AFTER} {INSERT , UPDATE , DELETE} ON table_name [FOREACHROW]
BEGIN
--触发时执行的操作
END;
```
触发器名(trigger_name):为触发器命名的标识符;
触发时间(BEFORE或AFTER):指定触发器是在操作之前还是之后执行;
操作类型(INSERT,UPDATE或DELETE):指定在触发时要处理的操作类型;
表名(table_name):指定触发器要关联的表名;
FOREACHROW:可选项,指定每次操作只触发一行的触发器;
BEGIN和END之间的代码块:定义在触发时要执行的操作。
注意:具体的语法和特性可能会有所不同,取决于所使用的数据库管理系统的版本和厂商。
请在具体的数据库文档中查找更多信息。
实验五视图、存储过程与触发器的应用

实验五视图、存储过程与触发器的应用准备工作:1.创建数据库Student2.生成一个表名为student的表34.用企业管理器创建教工表teacher,要求如下:一、目的与要求1.掌握创建、修改、删除视图的SQL语句的用法。
2.掌握使用企业管管理器创建视图的方法。
3.了解存储过程基本概念和类型,掌握创建存储过程的方法和步骤。
4.掌握创建、查看、执行、修改和删除存储过程的SQL命令的用法。
5.了解触发器的基本概念和类型,掌握创建触发器的方法和步骤。
6.掌握创建查看、修改、使用和删除触发器的SQL命令的用法。
二、实验内容视图1. 在STUDENT库中以“student”表为基础,建立一个名为“V_经济管理系学生”的视图(注:经济管理系的系部代码为“02”)。
在使用该视图时,将显示“student”表中的所有字段。
USE STUDENTGOIF EXISTS(SELECT name FROM sysobjectsWHERE name=' V_经济管理系学生' AND type='V')DROP view V_经济管理系学生GOCREATE VIEW V_经济管理系学生ASselect * from studentwhere sdept='02'GO2. 使用视图“V_经济管理系学生”查询经济管理系学生的信息。
Select * from V_经济管理系学生3. 在查询分析器中使用更改视图的命令将视图“V_经济管理系学生”更名为“V_经管系男生”。
sp_rename V_经济管理系学生V_经管系男生4. 修改“V_经管系男生”视图的内容。
视图修改后,在使用该视图时,将得到经济管理系所有“男”学生的信息。
ALTER VIEW V_经管系男生ASSELECT * FROM studentwhere sdept='02' and sex='男'GO5. 删除视图“V_经管系男生”。
存储过程和触发器(实验报告)

WITH ENCRYPTION AS
SELECT*
FROM student_info
WHERE性别='男'
EXEC stu_en
DROP PROCEDURE stu_en
4.使用grade表。
(1)创建一个存储过程stu_g_r,当输入一个学生的学号时,通过返回输出参数获取该学生各门课程的平均成绩。
CREATE PROC stu_g_r @stu_no varchar(8)=NULL,
@stu_score real OUTPUT
AS
SELECT@stu_score=AVG(分数)
FROM grade
WHERE (学号=@stu_no)
(2)执行存储过程stu_g_r,输入学号0002。
DECLARE @score real
WHERE (a.姓名=@stu_name)
EXEC stu_g_p ‘刘卫平’
sp_helptext stu_g_p
3.使用student_info表。
(1)创建一个加密的存储过程stu_en,查询所有男学生的信息。
(2)执行存储过程stu_en,查看返回学生的情况。
(3)使用Transact-SQL语句DROP PROCEDURE删除存储过程stu_en。
(3)掌握通过SQL Server管理平台和Transact-SQL语句Alter procedure修改存储过程的方法;
(4)掌握通过SQL Server管理平台和Transact-SQL语句Drop procedure删除存储过程的方法;
(5)掌握通过SQL Server管理平台和Transact-SQL语句Create trigger创建触发器的方法和步骤;
sql存储过程和触发器

例7.6:在学生成绩库中创建存储过程proc_7_t2,要求实现如下功能:根 据学生学号,如果此学生存在,则产生该生的课程成绩列表,其中包括学 号、课程号、课程名称、成绩、学分等;如果此学生不存在,则显示“无 此学生!”。并调用此存储过程,显示“02020101”学生的课程成绩情况。
create proc proc_7_t2 @sno char(8) as if exists(select * from xsqk where 学号=@sno)
2. 修改触发器正文 ➢ 使用企业管理器 ➢ 使用T-SQL命令 语法格式:ALTER TRIGGER 触发器名称
ON 表或视图 { FOR | AFTER | INSTEAD OF } {[DELETE],[INSERT],[UPDATE]} AS SQL语句
7.2.4 删除触发器
语法格式: DROP TRIGGER 触发器名称 如果删除触发器所在的表时,系统将自动删除与该表相关的触发器。
and xscj.课程号 = xskc.课程号 and 班级 = ‘计算机0203’
7.1.5 删除存储过程
语法格式: DROP PROC[EDURE] 存储过程名称 例7.8:删除存储过程proc_7_1。
drop proc proc_7_1 一般地,在用T-SQL命令创建存储过程时,总是先确定要创建的存储过程 是否已经存在,如果存在,那么就删除重建。我们可以用如下语句实现: If exists( select name from sysobjects
select * From xsqk where 学号= @sno Else
print ‘无此学号的学生!’
思考:创建存储过程testproc2,实现根据学生的学号,查询 此学生的学号、姓名、所选课程号、课程名、成绩及学分等信 息。
存储过程和触发器

实验存储过程和触发器实验一存储过程的创建和使用【实验目的】1.掌握存储过程的概念,了解存储过程的类型2.掌握创建各种存储过程的方法3.掌握执行存储过程的方法。
4.掌握查看,修改,删除存储过程的方法【实验内容】1.在SSMS图形化界面下创建对表Customers进行插入,修改和删除的3个存储过程:insertCustomers、updateCustomers、deleteCustomers.2.在查询分析其中创建一个存储过程,要求输入作者的姓和名,如果存在,则返回这个作者以及作者所出版的书的信息,否则给出相应的提示信息。
3.用系统存储过程查看刚创建的存储过程的信息。
4.删除存储过程【实验主要步骤】1.在SSMS图形化界面下创建对表Customers进行插入,修改和删除的3个存储过程:insertCustomers、updateCustomers、deleteCustomers.2.在查询分析其中创建一个存储过程,要求输入作者的姓和名,如果存在,则返回这个作者以及作者所出版的书的信息,否则给出相应的提示信息。
3.用系统存储过程查看刚创建的存储过程的信息。
4.删除存储过程实验二触发器的创建和使用【实验目的】1.理解触发器的概念与类型。
2.理解触发器的功能及工作原理。
3.掌握创建、修改和删除触发器的方法。
4.掌握利用触发器维护数据完整性的方法。
【实验内容】触发器是一种实施复杂数据完整性的特殊存储过程,在对表或视图执行UPDATE、INSERT、DELETE语句时自动触发执行,以防止对数据不正确、未授权或不一致的修改。
1.使用T-SQL语句创建一个DELETE触发器,完成的功能是当在Categories表中删除记录时,检测Products表中是否存在相关记录,如果存在,则给出提示信息“不能删除该条记录”;如果不存在,则删除该条记录。
2.基于Sales表创建一个触发器,针对INSERT、DELETE、UPDATE操作。
sqlserver创建存储过程和触发器

• 针对例10:执行存储过程au_infor_all。
EXECUTE(EXEC) au_infor_all
查看、修改、重命名和删除存储过程:
• 存储过程的类型:
在 Microsoft SQL Server 2005中有多种可用的存储过程。本节简 要介绍每种存储过程。 1、用户定义的存储过程
存储过程是指封装了可重用代码的模块或例程。存储过程可以接受 输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言 (DDL) 和数据操作语言 (DML) 语句,然后返回输出参数。
修改存储过程:
存储过程可以根据用户的要求或者基表定义的改变而改变。使用ALTER PROCEDURE 语句可以更改先前通过执行 CREATE PROCEDURE 语句创建的 过程,但不会更改权限,也不影响相关的存储过程或触发器。
• 修改存储过程语法形式如下:
ALTER PROC[EDURE] procedure_name[;number] [{@parameter data_type}
以学生评教ID为主键的,中间存储的是同学对老师的不同信息。
该表内容如下: 评教ID 教师ID 备课认真 师生互动
1
2 3 4
001
007 009 012
3
2 5 4
4
4 3 4
• 管理任务:
从 tblRemarks 表中可以看,教务处如果直接对其汇总工作量很大, 因为他们必须逐一统计教师的信息。为减轻负担,小张以 tblRemarks表
• 存储过程的优点:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 1 页
西安财经学院
本 科 实 验 报 告
学 院( 部 ) 管理学院
实 验 室 实验楼422
课 程 名 称 大型数据库管理系统
学 生 姓 名
学 号
专 业 信息管理与信息系统
教务处制
二00二 年 12 月 1 日
第 2 页
《大型数据库管理系统》实验报告
开课实验室: 实验楼422 2012年 12月 1 日
学院 管理学院 年级、专业、班 信管 姓名 成绩
课程 名称 大型数据库管理系统 实验项目
名 称
实验五创建存储过程和
触发器
指导教师 何 焱
教师
评语
教师签名:
年 月 日
一、 实验目的
1. 通过对常用系统存储过程的使用,了解存储过程的类型;通过创建和执行存储过程,
了解存储过程的基本概念,掌握使用企业管理器及查询分析器执行T-SQL语句创建存储过程。
2. 通过创建触发器,了解触发器的基本概念,理解触发器的功能,掌握使用企业管理器
及查询分析器执行T-SQL语句创建触发器。
二、 实验原理
1. 存储过程(stored procedure)是一组事先编译好的Transact-SQL代码。存储过程作
为一个独立的数据库对象,可以作为一个单元被用户的应用程序调用。由于存储过程是已经编
译好的代码,所以执行的时候不必再次进行编译,从而提高了程序的运行效率。
2.触发器是一种特殊类型的存储过程,不由用户直接调用。创建触发器时会对其进行定义,
以便在对特定表或列作特定类型的数据修改时执行。Microsoft SQL Server 2000系统提供了3
种类型的触发器,即INSERT类型、UPDATE类型和DELETE类型
3.当向表中插入数据时,INSERT触发器触发执行。当INSERT触发器触发时,新的记录增加
到触发器表中和inserted表中。该inserted表是一个逻辑表,保存了所插入记录的拷贝,允
许用户参考INSERT语句中数据。触发器可以检查inserted表,来确定该触发器的操作是否应
该执行和如何执行。在inserted表中的那些记录,总是触发器表中一行或多行记录的冗余。
4.当触发一个DELETE触发器时,被删除的记录放在一个特殊的deleted表中。deleted表
是一个逻辑表,用来保存已经从表中删除的记录。该deleted表允许参考原来的DELETE语句删
除的已经记录在日志中的数据。
5.修改一条记录就等于插入一条新记录和删除一条旧记录。同样,UPDATE语句也可以看成
是由删除一条记录的DELETE语句和增加一条记录的INSERT语句组成。当在某一个有UPDATE触
第 3 页
发器表的上面修改一条记录时,表中原来的记录移动到deleted表中,修改过的记录插入到了
inserted表中。触发器可以检查deleted表和inserted表以及被修改的表,以便确定是否修改
了多个行和应该如何执行触发器的操作。
三、使用仪器、材料
操作系统:Windows 7
软件:Windows SQL Server 2008
四、实验内容
1.使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs
中。
2.在实验二创建的factory数据库中执行以下操作:
(1)创建一个为worker表添加职工记录的存储过程addworker。执行并验证存
储过程的正确性。最后删除该存储过程。
(2)在depart表上创建一个触发器depart_update,当更改部门号时同步更改
worker表中对应的部门号。执行并验证触发器的正确性。最后删除该触发器。
(3)在worker表上创建一个触发器worker_delete,当删除职工记录时同步删
除salary表中对应职工的工资记录。执行并验证触发器的正确性。最后删除该触发
器。
五、实验过程原始记录(附运行结果的截图显示)
1.使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs
中。
2.在实验二创建的factory数据库中执行以下操作:
(1)创建一个为worker表添加职工记录的存储过程addworker。执行并验证存
储过程的正确性。最后删除该存储过程。
用sql语句创建存储过程如下所示:
第 4 页
通过存储过程插入如下数据,此时work表中的数据也相应增加:
第 5 页
用sql语句删除该存储过程后查看该存储过程,如下所示:
(2)在depart表上创建一个触发器depart_update,当更改部门号时同步更改
worker表中对应的部门号。执行并验证触发器的正确性。最后删除该触发器。
用sql语句为部门表创建一个触发器如下所示:
修改depart表中的值并用sql语句查询work表中的数据是否也相应改变,结果显示通过修改
depart表中的数据,work表中的数据也相应改变了,如下所示:
第 6 页
用sql语句删除该触发器并查看,如下所示:
(3)在worker表上创建一个触发器worker_delete,当删除职工记录时同步删
除salary表中对应职工的工资记录。执行并验证触发器的正确性。最后删除该触发
器。
第 7 页
在work表中删除职工号为3的员工,结果我们能发现在salary表中没有职工号为1号的记录
第 8 页
删除触发器后查看已经删除。
六、实验结果及分析
1.对存储过程有了进一步的认识。
2.基本能使用T-SQL语句创建存储过程和创建触发器。