实验五 存储过程和触发器(计科)

合集下载

存储过程和触发器(数据库实验5)

存储过程和触发器(数据库实验5)

数据库基础与实践实验报告实验五存储过程和触发器班级:惠普测试142学号:**********姓名:***日期:2016-11-141 实验目的:1)掌握SQL进行存储过程创建和调用的方法;2)掌握SQL进行触发器定义的方法,理解触发器的工作原理;3)掌握触发器禁用和重新启用的方法。

2 实验平台:操作系统:Windows xp。

实验环境:SQL Server 2000以上版本。

3 实验内容与步骤利用实验一创建的sch_id数据库完成下列实验内容。

1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。

存储过程定义代码:CREATE PROCEDURE JSXX_PROCASSELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND o=o存储过程执行语句与执行结果截图:EXECUTE JSXX_PROC2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。

存储过程定义代码:CREATE PROCEDURE XM_PROC @sname VARCHAR(100)ASBEGINIF EXISTS(SELECT NULL FROM S WHERE sn=@sname)SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE o=o AND SC.sno=S.sno ANDS.sn=@snameELSEPRINT'无该姓名的同学。

'END运行截图:3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业),统计并显示该专业各年龄段男、女生人数。

如果没有该专业,则显示“无此专业”。

存储过程定义代码:CREATE PROCEDURE XBNL_PROC@departName VARCHAR(30)='计算机',@begin INT,@end INTASDECLARE @numOfBoys INTDECLARE @numOfGirls INTDECLARE @d# VARCHAR(3)DECLARE @result VARCHAR(50)BEGINSELECT @d# = dno FROM D WHERE dn=@departNameIF @d# IS NOT NULLBEGINSELECT @numOfBoys =COUNT(sno)FROM S WHERE age BETWEEN @begin AND @end AND dno=@d# AND sex='男'SELECT@numOfGirls =COUNT(sno)FROM S WHERE age BETWEEN@begin AND@end AND dno=@d# AND sex='女'SET @result = @departName+'专业年龄在'+CAST(@begin AS VARCHAR(3))+'-'+CAST(@end AS VARCHAR(3))+'之间的男生有'+CAST(@numOfBoys AS VARCHAR(3))+'人,'+'女生有'+CAST(@numOfGirls AS VARCHAR(3))+'人'ENDELSESET @result='无此专业。

实验五存储过程和触发器(计科)

实验五存储过程和触发器(计科)

实验五存储过程和触发器(计科)实验五:触发器和存储过程一、实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。

二、预习要求:存储过程和触发器的相关概念,事务的相关概念,编写相应的SQL语句。

三、实验内容:有一个小型的图书管理数据库,包含的表为:bookstore(bookid,bookname,bookauthor,purchasedate,state);--图书库存表borrowcard(cardid,ownername);--借书证表borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表写一个存储过程,实现借书操作,要求有事务处理。

(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。

(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。

(3)要求用触发器实现表的完整性控制。

四、完成情况(附上设计的SQL语句)。

------触发器和存储过程------触发器和存储过程CREATE DATABASE BOOK1gouse BOOK1CREATE TABLE BOOKSTORE(Bookid nvarchar(10),Bookname nvarchar(10),Bookauthor nvarchar(10),purchasedate datetime,state Nvarchar(10),primary key(Bookid))Create table Borrowcard(Cardid int,ownernamenvarchar(10),primarykey(Cardid))Create table Borrowlog(Cardid int,Bookid nvarchar(10),borrowdate datetime,returndate datetime ,primary key(Cardid,Bookid))insert into Borrowcard values(12,'wyb')insert into Borrowcard values(123,'wyb')insert into Borrowcard values(1,'wyb')insert into Bookstore values(1,'数据库','王珊','2012-04-23','存在') insert into Bookstore values(2,'数据结构','珊','2012-11-23','存在') insert into Bookstore values(3,'数据结构','珊','2011-1-23','存在') insert into Bookstore values(11,'数据库','王珊','2009-10-23','存在') insert into Bookstore values(12,'数据结构','珊','2001-11-23','存在') insert into Bookstore values(13,'数据结构','珊','2013-12-23','存在')----借书存储过程create proc borrow1@bookid nvarchar(10),@cardid intasbegin transactioninsert into Borrowlog(Cardid,Bookid,borrowdate,returndate) values(@cardid,@bookid,getdate(),null)if exists(select*from bookstore,Borrowcard where bookid=@bookid and state='存在'and cardid=@cardid) beginupdate bookstore set state='不存在'where bookid=@bookid commit transactionendelsebeginif exists(select*from bookstore where bookid=@bookid and state='不存在')Print'不存在该书'if not exists(select*from borrowcard,bookstore where cardid=@cardid) Print'没有此用户'rollback transactionEndexec borrow1'3',12exec borrow1'3',123exec borrow1'2',123drop proc borrow1----删除存储过程Create trigger insert_borrowlogon Borrowlog after insertasdeclare@borrowdate datetime,@returndate datetimeselect@borrowdate=borrowdate,@returndate=returndate from insertedif(@borrowdate>@returndate)print'借书时间不可晚于还书时间'rollbackselect*from bookstoreinsert into Borrowlog values(12,'1','2013-06-06','2012-05-5')五、思考题:如何通过系统的设置实现类似的功能,而不需触发器?答:通过定义存储过程或者设置外键约束等方法。

存储过程和触发器(实验报告)

存储过程和触发器(实验报告)
CREATE PROCEDURE stu_en
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创建触发器的方法和步骤;

实验五 存储过程和触发器的使用

实验五 存储过程和触发器的使用

实验五存储过程和触发器的使用【目的要求】1、了解存储过程的基本概念和类型。

2、了解创建存储过程的T-SQL语句的基本语法。

3、了解查看、执行、修改和删除存储过程的T-SQL命令的用法。

4、了解触发器的基本概念和类型。

5、了解创建触发器的T-SQL语句的基本语法。

6、了解查看、修改和删除存储过程的T-SQL命令的用法。

【实验内容】内容一:存储过程的使用一、数据需求分析存储过程是一种数据库对象,为了实现某个特定任务,将一组预编译的SQL语句以一个存储单元的形式存储在服务器上,供用户调用,自动完成需要预先执行的任务。

存储过程在第一次执行时进行编译,然后将编译好的代码保存在高速缓存中便于以后调用,提高了代码的执行效率。

二、内容要点分析1、SQL SERVER支持五种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程和扩展存储过程。

其中,系统存储过程是由系统提供的存储过程,可以作为命令执行各种操作。

系统存储过程定义在系统数据库master中,其前缀是sp_。

本地存储过程是指在用户数据库中创建的存储过程,这种存储过程完成特定数据库操作任务,不能以sp_为前缀。

2、只能在当前数据库中创建存储过程。

3、创建存储过程时,应指定所有输入参数和向调用过程或批处理返回的输出参数、执行数据库操作的编程语句和返回至调用过程或批处理以表明成功或失败的状态值。

4、创建存储过程的T-SQL语句CREATE PROC[EDURE] 存储过程名称[{ @参数名称数据类型 }] [,…n][WITH{ RECOMPILE|ENCRYPTION }]ASSQL语句序列说明:(1)RECOMPILE表明每次运行该过程时,将其重新编译。

(2)ENCRYPTION表示 SQL SERVER 加密SYSCOMMENTS表中包含CREATE PROCEDURE语句文本的条目。

注:必须将CREATE PROCEDURE语句放在单个批处理中。

实验五触发器与存储过程的设计-西安理工大学

实验五触发器与存储过程的设计-西安理工大学

实验五触发器与存储过程的设计-西安理工大学实验五触发器与存储过程的设计实验目的1、掌握创建存储过程的方法和步骤。

2、掌握存储过程的使用方法。

3、掌握创建触发器的方法和步骤。

4、掌握触发器的使用方法。

实验内容、要求以教学管理系统为例,有Student、SC和Course表,根据数据库的完整性要求,自己设计一个存储过程和触发器,当删除SC表的某条记录时,在屏幕上给出提示,当删除该条记录后,若没有学生选择此门课时,要求将Course表中对应的记录删除。

实验环境Microsoft Word, SQL Server 2000环境。

实验过程一、存储过程的设计1、有关概念存储过程是由SQL语句及控制流语句组成的集合。

调用一个存储过程,可以一次性地执行过程中的所有语句。

从这一点来说,它类似于程序。

存储过程由用户建立,它作为数据库的一个成分,存在于数据库中。

存储过程类似VFP中的过程(函数、子程序),它可以接受参数,也可以返回参数。

存储过程可以被客户端、其他存储过程或触发器调用。

以SP_为前缀的存储过程是SQL提供的系统存储过程; 以XP_为前缀的存储过程是扩展的存储过程; 关联到表上的存储过程称为触发式存储过程。

2、设计存储过程使用SQL语句创建存储过程(或使用企业管理器创建存储过程)。

3、执行存储过程对存储在服务器上的存储过程,使用EXECUTE命令执行它。

4、操作存储过程查看、修改、删除存储过程。

二、触发器的设计触发器是一种特殊的存储过程, 用它来控制关联的表。

1、设计一个触发器使用SQL语句创建触发器(使用企业管理器创建触发器)。

2、查看、修改和删除触发器实验六图书管理系统设计及SQL编程实验目的初步掌握数据库系统的开发过程实验内容1.根据数据库设计的基本思想,设计出图书管理系统的概念结构(用E-R图表示)。

2.根据E-R图进行数据库的逻辑设计。

3.在逻辑设计的基础上,进行数据库的物理设计。

4.给出各设计阶段的完整文档(E-R图、逻辑模型、数据字典)。

存储过程及触发器实验报告

存储过程及触发器实验报告

数据库技术与应用实验报告七班级:机械因材学号: 16 姓名:高永吉一:实验名称:存储过程及触发器二,实验目的:⑴ 使用系统常用的存储过程;⑵ 掌握存储过程的创建及应用(3) 理解触发器的概念;(4) 掌握触发器的创建及应用。

三.实验内容、过程和结果:存储过程1创建一个存储过程,查看学号为1(根据实际情况取)的学生的信息,包括该学生的学号,班级编号,姓名。

(提示:查询涉及到表Student)2执行1中创建的存储过程。

3使用输入参数创建题1中的存储过程。

题1中所创建的存储过程只能学号为1的学生信息进行查看,要想对其他学生进行查看,需要进行参数传递。

4执行3中创建的存储过程,(1)按位置传递参数;(2)通过参数名传递参数;5触发器1)在课程表Course上创建一个触发器,该触发器被操作DELETE所触发,且要求触发触发器的DELETE语句在执行被取消。

2)在表Student中建立插入触发器, 插入一条记录时,若年龄>100或者年龄<=0,拒绝插入记录并显示:“年龄不符合规定,无法插入此记录!”;3)创建一个触发器,如果在Student表中添加或更改数据,向客户端显示一条消息“你正在插入或修改学生表的数据”,要求触发触发器的DELETE、UPDATE语句被执行。

4 )为Course表创建一个名称为my_trig的触发器,当用户成功删除该表中的一条或多条记录时,触发器自动删除Student表中与之有关的记录。

5 )使用系统存储过程查看创建的触发器。

图一:创建一个存储过程,查看Tno为1(根据实际情况取)的教师的信息,包括该教师的姓名,sal图二执行1中创建的存储过程。

图三使用输入参数创建题1中的存储过程。

图四执行3中创建的存储过程,(按位置传递参数)图五执行3中创建的存储过程通过参数名传递参数;图六使用系统存储过程查看3中创建的存储过程图七删除3中创建的存储过程。

图八在Teacher上创建一个触发器,该触发器被操作DELETE所触发,且要求触发触发器的DELETE语句在执行被取消。

5 实验五 创建存储过程和触发器

5 实验五 创建存储过程和触发器

实验五创建存储过程和触发器
一、实验目的
1.通过对常用系统存储过程的使用,了解存储过程的类型;通过创建和执行存储过程,了解存储过程的基本概念,掌握使用企业管理器及查询分析器执行T-SQL语句创建存储过程。

2.通过创建触发器,了解触发器的基本概念,理解触发器的功能,掌握使用企业管理器及查询分析器执行T-SQL语句创建触发器。

二、实验要求
1.实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验内容的预习准备工作;
2.能认真独立完成实验内容;
3.实验后做好实验总结,根据实验情况完成总结报告。

三、实验学时
2学时
四、实验内容
1、使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs中。

2、在实验二创建的factory数据库中执行以下操作:
(1)创建一个为worker表添加职工记录的存储过程addworker。

执行并验证存储过程的正确性。

最后删除该存储过程。

(2)在depart表上创建一个触发器depart_update,当更改部门号时同步更改worker 表中对应的部门号。

执行并验证触发器的正确性。

最后删除该触发器。

(3)在worker表上创建一个触发器worker_delete,当删除职工记录时同步删除salary表中对应职工的工资记录。

执行并验证触发器的正确性。

最后删除该触发器。

存储过程与触发器 实验报告

存储过程与触发器 实验报告

信息工程学院实验报告课程名称:《数据库原理》实验项目名称:存储过程与触发器一、实验目的:(1)了解存储过程的概念(2)掌握创建、执行存储过程的方法(3)了解查看、修改和删除存储过程的方法(4)了解触发器的概念(5)掌握创建触发器的方法(6)掌握查看、修改、删除触发器信息的方法二、实验设备与器件Win7 +Sql server 2008三、实验内容与步骤(一)存储过程运行实验四附录中的SQL语句,准备实验数据。

然后创建下列存储过程,并调试运行存储过程,查看运行结果。

1.在企业管理器中创建一个名为StuInfo的存储过程,完成的功能是在student表中查询系号为D2的学号、姓名、性别、年龄、系号的内容。

CREATE PROCEDURE StuInfoASSELECT SNO AS学号,SNAME AS姓名,SSEX AS性别,SAGE AS年龄,DNO AS系号FROM studentWHERE DNO='D2'结果:stuinfo2.使用T_SQL语句创建存储过程,完成的功能是在表student,course和study中查询以下字段:学号、姓名、性别、课程名称、考试分数。

use mydb--查询是否已存在此存储过程,如果存在,就删除它if exists(select name from sysobjectswhere name='StuScoreInfo'and type='P')drop procedure StuScoreInfogo--创建存储过程CREATE PROCEDURE StuScoreInfoasselect student.sno as学号,sname as姓名,ssex as性别,ame as课程名称,study.grade as考试分数from student,course,studywhere student.sno=study.sno and o=o结果:StuScoreInfo3.使用T_SQL语句创建一个带有参数的存储过程stu_sno_info,该存储过程根据传入的学生编号,在student表中查询此学生的信息。

实验五 存储过程和触发器

实验五 存储过程和触发器

实验五触发器、存储过程操作实验本实验需要2学时。

请大家先根据“触发器.doc”文档完成相关操作,再进行本次实验。

介绍完“存储过程”后,需上交本次实验报告。

一、实验目的(1)掌握SQL Server中的触发器的使用方法;(2)掌握存储过程的操作方法。

二、实验内容1. 创建、查看、修改和删除触发器。

2. 创建、查看、修改和删除存储过程。

三、实验方法1. 触发器的操作(1)建立触发器方法一:使用企业管理器首先,打开企业管理器,定位数据库并找到要创建触发器的表;然后,右击该表名,在弹出的快捷菜单中选择“设计表”,在打开的“设计表”窗口中单击按钮,打开如图1所示窗口。

图1 触发器属性窗口最后,在触发器属性窗口中输入触发器的内容,并单击“确定”按钮。

方法二:使用CREATE TRIGGER语句语法:CREATE TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]}AS<SQL 语句块>(2)查看触发器方法一:使用企业管理器方法二:使用T-SQL语句- sp_help <触发器名>- sp_helptext <触发器名>- sp_depends <触发器名>(3)修改触发器方法一:使用企业管理器方法二:使用ALTER TRIGGER语句语法:ALTER TRIGGER <触发器名>ON { <表名> | <视图名>}{ FOR | INSTEAD OF | AFTER}{ [UPDATE] [,] [INSERT] [,] [DELETE]} AS<SQL 语句块>(4)删除触发器方法一:使用企业管理器方法二:使用DROP TRIGGER语句语法为:DROP TRIGGER <触发器名>2. 存储过程的操作(1)建立存储过程方法一:使用建立存储过程向导方法二:使用企业管理器方法三:使用SQL语句(CREATE PROCEDURE)语法:CREATE PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句> | <语句块> }(2)查看存储过程方法一:使用企业管理器方法二:使用SQL语句(系统存储过程)- sp_help <存储过程名>- sp_helptext <存储过程名>- sp_depends <存储过程名>(3)修改存储过程方法一:使用企业管理器方法二:使用SQL语句(ALTER PROCEDURE)语法为:ALTER PROC[EDURE] <存储过程名>[{@<参数名> <数据类型>}]AS {<SQL语句>| <语句块> }(4)删除存储过程方法一:使用企业管理器方法二:使用DROP PROCEDURE语句语法为:DROP PROCEDURE <存储过程名>四、实验内容1、在学生表student上建立一个DELETE类型的触发器tr_delete,触发动作是显示信息“已删除学生表中的数据”。

存储过程和触发器课件

存储过程和触发器课件
作用
触发器的主要作用是用于在数据表上 自动执行一系列操作,以确保数据的 完整性和一致性。
触发器的分类与触发事件
分类
根据触发时机,触发器可分为INSERT触 发器、UPDATE触发器和DELETE触发器 。
VS
触发事件
在执行INSERT、UPDATE或DELETE操作 时,触发器会自动执行。
触发器的优缺点
作用
存储过程可以用于封装数据库操作,简化复杂的数据库操作 ,提高数据访问的效率,减少网络流量,提高数据安全性等 。
存储过程的分类
系统存储过程
系统存储过程以sp_作为前缀,主 要用于管理系统数据库的存储过 程。
自定义存储过程
用户自定义存储过程是由用户根 据自己的需求编写的存储过程。
存储过程的优缺点
触发器参数
用于传递给触发器的值或变量。
触发器返回值
触发器执行完毕后返回的值或结果。
触发器的使用示例
• 示例1:创建一个在插入操作时触发的触发器,将新插入的 记录的ID复制到另一个表中。
触发器的使用示例
AFTER INSERT ON table1
CREATE TRIGGER after_insert_example
可维护性差:随着业务逻辑的 变更,可能需要修改多个触发
器,维护成本较高。
05
触发器的创建与使用
创建触发器的基本语法
• CREATE TRIGGER 触发器名称
创建触发器的基本语法
ON 表名 FOR EACH ROW WHEN 条件
创建触发器的基本语法
BEGIN 触发器逻辑 END;
触发器的参数与返回值
存储过程和触发器课件
• 存储过程概述 • 存储过程的创建与使用 • 存储过程的调试与优化 • 触发器概述 • 触发器的创建与使用 • 触发器的调试与优化

数据库实验-存储过程、触发器

数据库实验-存储过程、触发器
from SC
group by Sno
order by sum(Grade)desc
exec total
drop proc total
执行结果:命令已成功完成。
如图:
(3)创建存储过程,查找某门课的最高分(带输入参数的存储过程)。
代码:
create proc grade1
@Cname char(20)
石家庄经济学院
实验报告
学院:信息工程学院
专业:网络工程
信息工程学院计算机实验中心制
学号
411109030110
姓名
马立杰
实验日期
2014.5.12
实验室
260
指导教师
张有华
设备编号
实验内容
实验6存储过程、触发器
一实验题目
1.存储过程的定义和使用
2.触发器的创建与使用
二实验目的
1.掌握存储过程的定义、执行和调用方法。
如图:
(5)创建存储过程,统计某门课选修的人数,将人数返回。(带返回值的存储过程)
代码:
create proc proc1
@Cno char(10),
@number int output
as
select @number=count(*)
from SC
where Cno=@Cno
group by Cno
where Sno=
(select top 1 Sno from SC
group by Sno
order by count(*) desc)
exec proc2
drop proc proc2
执行结果:命令已成功完成。
如图:
2.触发器的创建与使用

数据库存储过程与触发器实验报告

数据库存储过程与触发器实验报告

南昌航空大学实验报告二00 年月日课程名称:数据库概论实验名称:数据库存储过程与触发器班级:122031 姓名:同组人:指导教师评定:签名:一、实验环境1.Windows2000或以上版本;2.SQLServer 2005。

二、实验目的熟悉不同数据库的存储过程和触发器,重点实践SQL Server2005,掌握SQL Server2005中有存储过程与触发器的相关知识。

三、实验要求完成实验指导书中p115-7和p132 -4。

四、实验步骤及参考源代码1.创建与执行存储过程create procedure C_P_Proc asselect distinct o,cna,pna,numfrom paper,customer,cpwhere o=o and paper.pno=cp.pno and cna='李涛' or cna='钱金浩' goexecute C_P_Proc2.删除存储过程drop procedure C_P_Proc3.创建插入触发器create trigger TR_PAPER_I ON PAKER12203125FOR INSERT ASDECLARE @appr floatDECLARE @apno intSELECT @appr=ppr,@apno=pno from insertedbeginif @appr<0 or @appr is nullbeginraiserror('报纸的单价为空或小于!',16,1)update paper set ppr=10where paper.pno=@apnoendend4.创建删除触发器create Trigger TR_PAPER_D on PAKER12203125after delete asdeclare @ipno char(6)declare @icount int;select @icount= count(*) from deleted,cpwhere deleted.pno=cp.pnoif @icount>=1beginselect @ipno=pnofrom deletedraiserror('级联删除cp表中的数据',16,1)delete from cp where cp.pno=@ipnoend5.创建修改触发器create trigger TR_PAPER_U ON PAKER12203125for update asdeclare @ippr floatselect @ippr=ppr from insertedif @ippr<0 or @ippr is nullbeginraiserror('输入单价不正确',16,1)rollback transactionend6. 分别对PAKER12203125表进行插入、修改、删除操作insert into PAKER12203125 (pno,pna,ppr)values('000006','江西日报','1') insert into PAKER12203125 (pno,pna,ppr)values('000007','江南都市报','15.5') delete from PAKER12203125 where pno='000001'update PAKER12203125 set ppr=12.5 where pno='000002'update PAKER12203125 set ppr=-2 where pno='000004'五、实验结果123.4.56六、实验体会试验过后,巩固了自己在课堂上所学的知识,并加深了记忆与了解,对以后的使用有很大作用在实验过程中,遇到一些困难,经过自己不断查找书籍并询问老师来解决问题,提高了自己的逻辑思维能力和动手能力。

触发器与储存过程实验

触发器与储存过程实验

数据库原理及应用实验报告题目:触发器与储存过程实验专业:计算机科学与技术班级:1320544学号:11姓名:李俊翔太原工业学院计算机工程系2015年11 月28日一、实验目的与要求使学生加深对触发器和存储过程的创建和使用。

二、实验内容1、掌握触发器的使用。

2、掌握存储过程的创建、修改和删除;掌握存储过程的执行。

具体内容如下:1)触发器的使用①在数据表“学生”中创建update触发器,级联更新“选课”表种相应的记录信息。

②利用Delete表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和分析。

2)存储过程的使用①在Student数据库中,建立一个存储过程,要求统计计算机系学生的人数,并将人数返回给用户。

②在Student数据库中,建立一个存储过程,要求统计成绩大于等于90分学生的人数;统计成绩大于等于80分并且小于90分学生的人数,并将人数返回给用户。

三、解决方案代码实现:1)触发器的使用①在数据表“学生”中创建update触发器,级联更新“选课”表种相应的记录信息。

create trigger Student_updateon Student for update asdeclare @bSno char(9),@aSno char(9)print'使用update触发器级联更新SC表中相关的行-开始'select @bSno=Sno from deletedprint'更新前的学号:'+@bSnoselect @aSno=Sno from insertedprint'更新后的学号:'+@aSnoupdate SC set Sno=@aSno where SC.Sno=@bSnoprint'使用update触发器级联更新SC表中相关的行-结束'②利用Delete表,将“学生”表中被删除的记录存储到“学生备份”表中,以供日后的数据查询和分析。

数据库实验5 存储过程和触发器

数据库实验5 存储过程和触发器

实验五存储过程和触发器一、实验目的(1) 通过实践理解存储过程和触发器的概念、作用及优点;(2) 掌握存储过程的定义与调用,实现存储过程中带有不同参数的应用;(3) 掌握创建触发器。

二、实验原理1.存储过程一个被命名的存储在服务器上的T-SQL语句的集合,是封装重复性工作的一种方法。

(1)创建存储过程CREATE PROC[DURE]PROCDURE_NAME [{@PARAMENT DATA_TYPE}[VARYING][=DEFAULT][OUTPUT]] [, (1)AS SQL_STATEMENTPROCEDURE_NAME:新存储过程的名称,必须符合标识符规则且唯一。

@PARAMETER:过程中的参数。

可以声明一个或多个参数。

用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。

使用 @ 符号作为第一个字符来指定参数名称。

参数名称须符合标识符规则。

每个过程的参数仅用于该过程本身;相同的参数名称可用在其它过程中。

默认情况下参数只能代替常量,不能代替表名、列名或其它数据库对象名称。

DATA_TYPE:参数的数据类型。

DEFAULT:参数的默认值。

如果定义了默认值,不必指定该参数的值即可执行过程。

默认值必须是常量或 NULL。

OUTPUT:表明参数是返回参数。

该选项的值可以返回给 EXEC[UTE]。

使用 OUTPUT 参数可将信息返回给调用过程。

(2)执行存储过程SQL SERVER系统中,可以使用EXECUTE语句执行存储过程。

EXECUTE语句也可以简写为EXEC。

如果将要执行的存储过程需要参数,那么应该在存储过程名称后面带上参数值。

[EXEC[UTE]]{[@RETURN_STATUS=]{PROCEDURE_NAME[;NUMBER]|@PROCEDURE_NAME_VAR}[@PARAMETER={VALUE|@VARIABLE[OUTPUT]|[DEFAULT]}[,…N](3) 删除存储过程使用DROP PROCEDURE语句可永久地删除存储过程。

实验:存储过程与触发器

实验:存储过程与触发器

实验名称:存储过程与触发器实验目的:掌握SQLSERVER存储过程与触发器的定义、调用操作数据库结构关系:语法规定:(1)存储过程定义语法:CREATE PROC 过程名@parameter 参数类型……@parameter 参数类型outputASBegin命令块End利用TSQL调用存储过程:Execute 过程名[参数值,……][Output]如果没有参数,直接调用过程名(2)创建事后触发器的语法:CREATE TRIGGER 触发器名ON 表名For Insert [,Update,Delete] AsBegin命令块End(3)创建替代触发器的语法:CREATE TRIGGER 触发器名ON 表名Instead of Insert [,Update,Delete] AsBegin命令块End实验内容:(一)存储过程(1)创建带输入参数的存储过程,输入查询的工资范围,输出查询到的职工信息Create proc Myproc1@mingzint,@maxgzintasselect * from 职工表where 工资between @mingz and @maxgz 调用该过程execute Myproc1 1000,4000(2)使用Transact-SQL语言创建带输入输出参数的存储过程。

输入仓库号,输出该仓库的职工信息、职工最高工资、最低工资Create proc Myproc2@cangkuhaovarchar(50),@maxgzint output,@avggzint outputasbeginselect * from 职工表where 仓库号=@cangkuhaoSelect @maxgz=max(工资) from 职工表where 仓库号=@cangkuhaoSelect @avggz=avg(工资) from 职工表where 仓库号=@cangkuhaoEnd调用存储过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五:触发器和存储过程
一、实验目的:理解触发器和存储过程的含义,掌握用SQL语句实现触发器和存储过程的编写,并初步掌握什么情况下使用事务。

二、预习要求:存储过程和触发器的相关概念,事务的相关概念,编写相应的SQL语句。

三、实验内容:
有一个小型的图书管理数据库,包含的表为:
bookstore(bookid,bookname,bookauthor,purchasedate,state);
--图书库存表
borrowcard(cardid,ownername);--借书证表
borrowlog(cardid,bookid,borrowdate,returndate);--借书记录表
写一个存储过程,实现借书操作,要求有事务处理。

(1)读者借书,要先设置书籍不在库标志state(借出),然后增加借书记录,在同一事务中完成。

(2)要求在事务执行过程中引入错误触发事件,以此体会事务的错误保护机制和事务编程的作用。

(3)要求用触发器实现表的完整性控制。

四、完成情况(附上设计的SQL语句)。

------触发器和存储过程
------触发器和存储过程
CREATE DATABASE BOOK1
go
use BOOK1
CREATE TABLE BOOKSTORE(Bookid nvarchar(10),Bookname
nvarchar(10),Bookauthor nvarchar(10),purchasedate datetime,state Nvarchar(10),primary key(Bookid))
Create table Borrowcard(Cardid int,ownername nvarchar(10),primary
key(Cardid))
Create table Borrowlog(Cardid int,Bookid nvarchar(10),borrowdate datetime,returndate datetime
,primary key(Cardid,Bookid))
insert into Borrowcard values(12,'wyb')
insert into Borrowcard values(123,'wyb')
insert into Borrowcard values(1,'wyb')
insert into Bookstore values(1,'数据库','王珊','2012-04-23','存在') insert into Bookstore values(2,'数据结构','珊','2012-11-23','存在') insert into Bookstore values(3,'数据结构','珊','2011-1-23','存在') insert into Bookstore values(11,'数据库','王珊','2009-10-23','存在') insert into Bookstore values(12,'数据结构','珊','2001-11-23','存在') insert into Bookstore values(13,'数据结构','珊','2013-12-23','存在')
----借书存储过程
create proc borrow1
@bookid nvarchar(10),
@cardid int
as
begin transaction
insert into Borrowlog(Cardid,Bookid,borrowdate,returndate)
values(@cardid,@bookid,getdate(),null)
if exists(select*from bookstore,Borrowcard where bookid=@bookid and state='存在'and cardid=@cardid)
begin
update bookstore set state='不存在'where bookid=@bookid
commit transaction
end
else
begin
if exists(select*from bookstore where bookid=@bookid and state='不存在')
Print'不存在该书'
if not exists(select*from borrowcard,bookstore where cardid=@cardid) Print'没有此用户'
rollback transaction
End
exec borrow1'3',12
exec borrow1'3',123
exec borrow1'2',123
drop proc borrow1----删除存储过程
Create trigger insert_borrowlog
on Borrowlog after insert
as
declare@borrowdate datetime
,@returndate datetime
select@borrowdate=borrowdate,@returndate=returndate from inserted
if(@borrowdate>@returndate)
print'借书时间不可晚于还书时间'
rollback
select*from bookstore
insert into Borrowlog values(12,'1','2013-06-06','2012-05-5')
五、思考题:
如何通过系统的设置实现类似的功能,而不需触发器?
答:通过定义存储过程或者设置外键约束等方法。

六、实验总结:
答:对存储过程非常不熟悉,做起来特别生硬。

所以我们应该多做上机练习,熟悉sql的语言环境,多看书,以提升自己各方面能力。

相关文档
最新文档