实验六-存储过程和触发器

实验六-存储过程和触发器
实验六-存储过程和触发器

实验六存储过程和触发器

1.实验目的

(1) 掌握存储过程和触发器的基本概念和功能

(2) 掌握创建,管理存储过程的方法

(3) 掌握创建,管理触发器的方法

2.实验内容及步骤

(1) 利用SQL Server Management Studio创建一个存储过程ProcNum,查询每个班级中学生的人数,按班级号升序排序.

在查询编辑器的存储过程模板中输入如下创建存储过程的代码并执行.

USE teaching

GO

CREATE PROCEDURE ProcNum AS

SELECT classno,COUNT(*)AS number FROM student

GROUP BY classno ORDER BY classno ASC

GO

EXEC ProcNum

(2) 利用Transact-SQL语句创建一个带有参数的存储过程ProcInsert,向score 表插入一条选课记录,并查询该学生的姓名,选课的所有课程名称,平时成绩和期末成绩.

<1> 在查询编辑器输入如下创建存储过程的代码并执行.

USE teaching

GO

CREATE PROCEDURE ProcInsert(@sno NCHAR(10),@cno NCHAR(6),@usually NUMERIC(6,2),@final NUMERIC(6,2))AS

INSERT INTO score VALUES (@sno,@cno,@usually,@final)

SELECT sname,cname,usually,final

FROM student s,course c,score sc

WHERE s.studentno=sc.studentno and c.courseno=sc.courseno and s.studentno=@sno

<2> 调用存储过程ProcInsert,向score表插入一条选课记录.

DECLARE@AVERAGE NUMERIC(6,2)

EXEC ProcInsert'16135222201','c05103',88,90

(3) 利用Transact-SQL语句创建一个存储过程ProcAvg,查询指定班级指定课程的平均分。班级号和课程名称由输入参数给定,计算出的平均分通过输出参数返回。若该存储过程已存在,则删除后重建。

<1> 在查询编辑器中输入如下创建存储过程的代码并执行:

USE teaching

GO

IF EXISTS(SELECT*FROM sysobjects WHERE name='ProAvg'and type='P') DROP PROCEDURE ProcAvg

GO

CREATE PROCEDURE ProcAvg(@classno NCHAR(10),@cname NCHAR(20),@avg NUMERIC(6,2)OUTPUT) AS

SELECT@avg=AVG(final)

FROM student s,course c,score sc

WHERE s.studentno=sc.studentno and c.courseno=sc.courseno and classno=@classno and cname

=@cname

<2> 调用存储过程ProcAvg,查询160502班中"C语言"课程的平均分,并通过PRINT函数输出查询结果。

DECLARE@average NUMERIC(6,2)

EXEC ProcAvg'160502','C语言',@average OUTPUT

PRINT'160502班中C语言课程的平均分为'+CAST(@average AS VARCHAR(10))

(4) 利用SQL Server Management Studio创建一个AFTER触发器trigsex,当插入或修改student表中性别字段sex时,检查数据是否为“男”或“女”

在查询编辑器的触发器的触发器模板中输入如下创建触发器的代码并执行:USE teaching

GO

CREATE TRIGGER trigsex ON student AFTER INSERT,UPDATE AS

BEGIN

DECLARE@sex char(2)

SELECT@sex=sex FROM inserted

IF@sex<>'男'and@sex<>'女'

BEGIN

RAISERROR('性别只能为男或女',16,1)

ROLLBACK

END

END

执行如下插入语句:

INSERT INTO student(studentno,sname,sex,birthday,classno)

VALUES('16138211039','李琳琳','F','1998-6-3','160802')

(5) 利用Transact-SQL语句创建一个AFTER触发器trigforeign,当向score表中插入或修改记录时,如果插入或修改的数据与student表中数据不匹配,即没有对应的学号存在,则将此记录删除。

<1> 删除student和score表中之间的外键约束FK_student_score,程序代码如下:

ALTER TABLE score

DROP CONSTRAINT FK_score_student

<2> 在编辑器中输入如下创建触发器的代码并执行

USE teaching

GO

create TRIGGER trigforeign ON score AFTER INSERT,UPDATE AS BEGIN

DECLARE@sno char(5)

SELECT@sno=studentno FROM inserted

IF NOT EXISTS(SELECT*from student WHERE studentno=@sno) BEGIN

RAISERROR('该学生信息不存在,不允许插入选课信息',16,1)

ROLLBACK

END

END

<3> 执行如下插入语句

INSERT INTO score(studentno,courseno,usually,final)

values('16138211039','c05109',88,90)

提示信息如下:

INSERT 语句与FOREIGN KEY 约束"FK_score_student"冲突。该冲突发生于数据库"teaching",表"dbo.student", column 'studentno'。

语句已终止。

(6)利用Transact-SQL语句创建一个AFTER触发器trigclassname,当向class 表中插入或修改数据时,如果出现班级名称重复则回滚事务。若该触发器已存在,则删除后重建。

<1> 在查询编辑器中输入如下创建触发器的代码并执行:

USE teaching

Go

IF EXISTS(SELECT*FROM sysobjects WHERE name='trigclassname'AND type='TR') DROP TRIGGER trigclassname

GO

CREATE TRIGGER trigclassname ON class AFTER INSERT,UPDATE AS

BEGIN

DECLARE@name CHAR(10)

SELECT@name=inserted.classname FROM inserted

IF EXISTS(SELECT classname FROM class WHERE classname=@name GROUP BY classname HAVING COUNT(*)>=2)

BEGIN

RAISERROR('班级名称重复,不能插入',16,1)

ROLLBACK

END

END

对于AFTER触发器而言,判断是否出现姓名重复的Transact-SQL语句仅在插入和修改操作成功执行时才被触发。当向student表中插入或修改数据时,新的纪录将同时被添加到数据表student和临时表inserted中,因此仅当student 表中至少存在两条纪录的姓名字段与inserted表相同,方可确认插入或修改操作出现姓名重复,事物需回滚。

<2> 执行如下插入语句:

INSERT INTO class(classno,classname,department,monitor)

VALUES('160602','计算机','计算机学院','马文斐')

3.实验报告总结

(1)存储过程中输出参数与输入参数在定义、调用的区别:

输入参数是传递给存储过程的,就是原料.输出参数是存储过程的产出,就是产品.

在调用存储过程前,相关的输入参数必须已经有确定的值; 存储过程根据输入参数的值以及内部算法,将计算的结果保存到输出参数中. 输出参数在调用存储过程前无须有确定的值,只需定义这样一个变量,将他传给存储过程,存储过程执行之后,该输出参数就有了确定的值.可以进一步使用该值.

(2)触发器INSERT、DELETE 和UPDATE操作与临时表insert和deleted的关系:

当由INSERT或UPDATE语句激活相应触发器之后,所有被添加或被更新的记录都被存储到inserted表。当由DELETE或UPDATE语句激活相应触发器之后,所有被删除的记录都被送到deleted表。在触发器的执行过程中,可以读取这两个表中的内容,但不能修改它们。当触发器的工作完成之后,这两个表也将从内存中删除。

(3)存储过程与触发器的联系和区别:

触发器(Trigger)是一种响应数据操作语言(DML)事件或数据定义语言(DDL)事件而执行的特殊类型的存储过程,是在用户对某一表中的数据进行UPDATE、INSERT和DELETE操作时被触发执行的一段程序。触发器有助于强制引用完整性,以便在添加、更新或删除表中的行时保留表之间已定义的关系。

.

存储过程与触发器实验

第一章存储过程与触发器实验 实验目的 1.理解存储过程的工作原理和作用。 2.掌握存储过程设置和程序设计过程。 3.理解触发器的工作原理和作用。 4.掌握触发器编写方法。 实验环境 采用IBM DB2或Sybase数据库管理系统作为实验平台。其中,DB2可以采用DB2 Express-C或DB2 V8 Enterprise。 实验完成人:李肇臻,谢锦 实验内容 一、存储过程实验 1.针对下面2个完整性约束条件,建立存储过程,实现当数据导入或更新时,可以自动修改拥塞率、半速率话务量比例 (1)拥塞率=拥塞数量/呼叫数量 (2)半速率话务量比例=半速率话务量/全速率话务量 在DB2CMD中运行,win7用管理员权限。 create procedure M() language SQL begin update CALLDATA set "callcongs"="congsnum"/"callnum" where "congsnum"<>0 and "callnum"<>0; update CALLDATA set "rate"="thtraff"/"traff" where "thtraff"<>0 and "traff"<>0; end @ 2.将存储过程添加到数据库服务器上

3.在客户端编写调用存储过程的主程序 4.运行客户端程序,调用存储过程,观察存储过程执行过程和数据更新情况;调用就用db2 CALL M() 二、触发器实验 1. 针对下列约束条件,分别建立1个触发器: 1)每个小区/扇区最多占用14个TCH频点,合法频点范围在[1,60]之间。当向小区中新加入频点时,如果小区中现有频点数目已达到14个,则用新加入的频点替换现有频点中的最小频点;当修改或新加入频点时,如果发现频点不在合法范围内,则输出提示信息,并拒绝该操作。 create trigger first_1 after insert on FREQUENCY

实验六 存储过程和触发器

实验六存储过程和触发器(2学时) 1.实验目的 (1)掌握通过SQL Server管理平台和Transact-SQL语句CREATE PROCEDURE创建存储过程的方法和步骤。 (2)掌握使用Transact-SQL语句EXECUTE执行存储过程的方法。 (3)掌握通过SQL Server管理平台和Transact-SQL语句CREATE TRIGGER创建触发器的方法和步骤。 (4)掌握引发触发器的方法。 (5)掌握事务、命名事务的创建方法,了解不同类型的事务的处理情况。 2.实验内容 (1)输入以下T-SQL代码,创建一个利用流控制语句的存储过程letters_print,该存储过程能够显示26个小写字母。 CREATE PROCEDURE letters_print AS DECLARE @count int SET @count=0 WHILE @count<26 BEGIN PRINT CHAR(ASCII('a')+ @count) SET @count=@count +1 END 使用EXECUTE命令执行letters_print存储过程。 (2)输入以下代码,创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。 CREATE PROCEDURE stu_info @name varchar(40) AS SELECT a.no,name,cno,grade FROM Student a INNER JOIN grade b ON a.no= b.sno WHERE name= @name 使用EXECUTE命令执行存储过程stu_info,其参数值为“马东”。 如果存储过程stu_info执行时没有提供参数,要求能按默认值查询(设姓名为“刘卫平”),如何修改该过程的定义? (3)使用student_db数据库中的Student表、course表、grade表。 ①创建一个存储过程stu_grade,查询学号为0001的学生的姓名、课程名称、

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

数据库基础与实践实验报告实验五存储过程和触发器 班级:惠普测试142 学号:1408090213 姓名:闫伟明 日期:2016-11-14

1 实验目的: 1)掌握SQL进行存储过程创建和调用的方法; 2)掌握SQL进行触发器定义的方法,理解触发器的工作原理; 3)掌握触发器禁用和重新启用的方法。 2 实验平台: 操作系统:Windows xp。 实验环境:SQL Server 2000以上版本。 3 实验内容与步骤 利用实验一创建的sch_id数据库完成下列实验内容。 1.创建存储过程JSXX_PROC,调用该存储过程时可显示各任课教师姓名及其所教课程名称。 存储过程定义代码: CREATE PROCEDURE JSXX_PROC AS SELECT tn 教师姓名,cn 所教课程FROM T,TC,C WHERE T.tno=TC.tno AND https://www.360docs.net/doc/9d13301316.html,o=https://www.360docs.net/doc/9d13301316.html,o 存储过程执行语句与执行结果截图: EXECUTE JSXX_PROC 2.创建存储过程XM_PROC,该存储过程可根据输入参数(学生姓名)查询并显示该学生的学号、 所学课程名称和成绩;如果没有该姓名学生,则提示“无该姓名的同学”。 存储过程定义代码:

CREATE PROCEDURE XM_PROC @sname VARCHAR(100) AS BEGIN IF EXISTS(SELECT NULL FROM S WHERE sn=@sname) SELECT S.sno 学号,cn 课程,score 成绩FROM S,SC,C WHERE https://www.360docs.net/doc/9d13301316.html,o=https://www.360docs.net/doc/9d13301316.html,o AND SC.sno=S.sno AND S.sn=@sname ELSE PRINT'无该姓名的同学。' END 运行截图: 3.创建存储过程XBNL_PROC,该存储过程可根据输入参数(专业名词,默认值为计算机专业), 统计并显示该专业各年龄段男、女生人数。如果没有该专业,则显示“无此专业”。 存储过程定义代码: CREATE PROCEDURE XBNL_PROC @departName VARCHAR(30)='计算机', @begin INT, @end INT AS

数据库原理课程设计实验[创建存储过程与触发器]

存储过程与触发器实验日期和时间: 2016 年 5 月13 日、 星 期五第节 实验室:DJ2-信息管理实验室 班级:学号:姓名: 实验环境: 1.硬件:笔记本电脑 2.软件:SQL Server 2012 实验原理: 存储过程概念:存储过程是事先编好的,存储在数据库中的一组被编译了的T-SQL命令集合,这些命令用来完成对数据库的指定操作。存储过程可以接受用户的输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输入参数。 触发器概念:触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(insert,delete,update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 实验任务: 此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。

假定有学校的图书馆管理信息系统,可以用于日常管理书库和同学们的借还书工作。以下列出参考的库表情况: 根据管理的业务需求来分析,该管理信息系统的数据库应至少包括如下数据表:(打★号的是必须有的表) 1.★图书现有库存表。作用:记录图书的现有库存情况。至少包括:书号、书名、 作者、简介、类别、价格、出版社、出版日期、现有库存数量、最小库存量、库 存总量、库存位置等。 2.★读者信息表。作用:记录读者信息。至少包括:读者编号、证件类型、证件号 码、姓名、性别、职业(可填写教师、学生、教工、其它……)、所属单位、地 址、联系电话等。 3.★借书记录表。作用:记录借书情况,以及是否归还。至少包括:借阅ID(主 键,可设置为自动编号)、书号、读者编号、借阅数量、借阅日期、是否归还、 管理员编号……等。 4.★还书记录表。作用:记录还书情况。至少包括:还书ID(主键,可设置为自动 编号)、书号、读者编号、归还数量、归还日期、是否超期(超过假设45天为 超期)、超期天数、管理员编号……等。(附:为简化操作,续借可视为归还后 再借)。 5.管理员信息表。作用:记录负责管理书库和借书还书工作的管理员信息。至少包 括:管理员编号、职工编号(在职工档案表中的职工编号)、用户名、密码、管 理员级别等……。 6.职工档案表表。作用:记录职工档案。至少包括: 职工编号、姓名、性别、单 位、职称、职务、出生日期、学历、……其它字段自拟。

实验六 存储过程和触发器

实验六存储过程与触发器 一、目的与要求 1.掌握编写数据库存储过程的方法。 2.掌握建立数据库触发器的方法,通过实验观察触发器的作用与触发条件设置 等相关操作。 二、实验准备 1.了解编写存储过程与调用的T-SQL语法; 2.了解触发器的作用; 3.了解编写触发器的T-SQL语法。 三、实验内容 (一)存储过程 在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学课程编号与课程名称,若院系不存在,返回提示信息。 提示:D_Info表中存储了院系代码D_ID,而St_Info表中学号字段St_ID的前两位与之对应,则D_Info表与St_Info表之间的联系通过这两个字段的运算构成连接条件。 1.分别执行存储过程getPractice,查询“法学院”与“材料科学与工程学院” 的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号与课程名称。 create procedure getPractice @D_Name varchar(30) output as begin if not exists (select * from D_Info where D_Name= @D_Name ) print '对不起,该院系不存在' else select st_info、St_ID,C_Info、C_No,C_Name from s_c_info inner join st_info on st_info、St_ID=s_c_info、st_id inner join C_Info on s_c_info、c_no=C_Info、C_No where st_info、St_ID in ( select St_ID from st_info join D_Info on D_Info、D_ID =left(st_info、St_ID,2) where C_Info、C_Type='实践' and D_Info、D_Name= @D_Name ) end go

实验六 MySql存储过程

实验六MySql存储过程 一、实验目的 1、熟悉MySql的存储过程 二、实验内容 1、建立一张学生表,属性有学号、姓名、年龄三个字段。 2、建立一个存储过程,实现学生的全查询 3、分别用IN 和OUT实现姓名的调用 4、声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。 5、建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生. 6、建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 三、试验结果截图 1.建立一张学生表,属性有学号、姓名、年龄三个字段。 2.建立一个存储过程,实现学生的全查询

3.分别用IN 和OUT实现姓名的调用 4.声明一个变量,把变量加1,再把变量加入到学生表的学号字段中。

5.建立一个存储过程,外部调用这个存储过程,当外部传入的值是0时,则在学生表中插入一个学号是17的学生,如果是1时,则在学生表中插入一个学号是18的学生,如果都不是,则在学生表中插入一个学号是19的学生.

6建立一个存储过程,做一个循环语句,循环插入5个学生。(至少用三种循环的存储过程方法) 所有代码: 1. create table stu( stuno int, stuna varchar(20), stuage int ); insert into stu values(001,'zhangsan',22);

insert into stu values(002,'lisi',23); insert into stu values(003,'wangwu',23); insert into stu values(004,'maliu',24); insert into stu values(005,'zhaoqi',25); insert into stu values(006,'gaoba',23); insert into stu values(007,'ddddd',22); insert into stu values(008,'ttttt',21); 2. create procedure select_all() select * from stu; 3. delimiter // create procedure searchno( in no int, out na varchar(20), out age int ) begin select stuna from stu where stuno=no into na; select stuage from stu where stuno=no into age; end // delimiter ; call searchno(n,@na,@age); select @na,@age; 4. delimiter // create procedure noupdate( in n int) begin update stu set stuno=stuno+n; end // delimiter ; 5. delimiter // create procedure addstu( in sno int ) begin case sno when 0 then insert into stu values(17,'no17',20); when 1 then insert into stu values(18,'no18',20); else insert into stu values(19,'no19',20); end case; end //

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

信息工程学院实验报告 课程名称:《数据库原理》 实验项目名称:存储过程与触发器 一、实验目的: (1)了解存储过程的概念 (2)掌握创建、执行存储过程的方法 (3)了解查看、修改和删除存储过程的方法 (4)了解触发器的概念 (5)掌握创建触发器的方法 (6)掌握查看、修改、删除触发器信息的方法 二、实验设备与器件 Win7 +Sql server 2008 三、实验内容与步骤 (一)存储过程 运行实验四附录中的SQL语句,准备实验数据。然后创建下列存储过程,并调试运行存储过程,查看运行结果。 1.在企业管理器中创建一个名为StuInfo的存储过程,完成的功能是在student表中查询系号为D2的学号、姓名、性别、年龄、系号的内容。 CREATE PROCEDURE StuInfo AS SELECT SNO AS学号, SNAME AS姓名, SSEX AS性别, SAGE AS年龄, DNO AS系号 FROM student WHERE DNO='D2' 结果: stuinfo 2.使用T_SQL语句创建存储过程,完成的功能是在表student,course和study中查询以下字段:学号、姓名、性别、课程名称、考试分数。

use mydb --查询是否已存在此存储过程,如果存在,就删除它 if exists(select name from sysobjects where name='StuScoreInfo'and type='P') drop procedure StuScoreInfo go --创建存储过程 CREATE PROCEDURE StuScoreInfo as select student.sno as学号, sname as姓名, ssex as性别, https://www.360docs.net/doc/9d13301316.html,ame as课程名称, study.grade as考试分数 from student,course,study where student.sno=study.sno and https://www.360docs.net/doc/9d13301316.html,o=https://www.360docs.net/doc/9d13301316.html,o 结果: StuScoreInfo 3.使用T_SQL语句创建一个带有参数的存储过程stu_sno_info,该存储过程根据传入的学生编号,在student表中查询此学生的信息。 if exists(select name from sysobjects where name='stu_info'and type='P') drop procedure stu_info go --创建存储过程 create procedure stu_info @sno varchar(8) as select sno as学号, sname as姓名, ssex as性别, sage as年龄, dno as年级

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

实验6 存储过程与触发器 一、实验目的 1、加深与巩固对存储过程与触发器概念的理解。 2、掌握触发器的简单应用。 3、掌握存储过程的简单应用。 二、实验内容 一)存储过程: 1、创建一存储过程,求l+2+3+…+n,并打印结果。 CREATE PROCEDURE addresult AS DECLARE @n int=10,/*最后一个数*/ @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。EXEC addresult

3、修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。 CREATE PROCEDURE addresult1 @n int=10 /*最后一个数*/ AS DECLARE @i int=0, @result int=0 /*结果*/ BEGIN WHILE(@i<=@n) BEGIN SET @result=@result+@i SET @i=@i+1 END PRINT'1+2+3+、、、+n的结果就是:' PRINT @result RETURN(@result) END GO 4、调用上面修改后的addresult1存储过程,打印l+2+3+…+100的结果。 EXEC addresult1 100 5.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。

数据库实验报告六_存储过程

HUNAN UNIVERSITY 数据库 实验报告 学生姓名 学生学号 专业班级 指导老师 2017 年5月24日

SELECT COUNT(*)INTO more90 FROM sc WHERE cno = countcno AND grade >= 90; /*将结果存入新表sumScore中*/ create table sumScore( scorestage char(10), number smallint); insert into sumScore values('x<60', less60); insert into sumScore values('60<=x<70', b60a70); insert into sumScore values('70<=x<80', b70a80); insert into sumScore values('80<=x<90', b80a90); insert into sumScore values('x>=90', more90); END$$ call sumScore(); /*调用上述存储过程*/ 首先创建存储过程,然后再调用存储过程。结果如下: (上述结果图截自Navicat软件) 可以看到,在stuinfo中新建了一个基本表sumscore,表中内容是数学课程成绩的各分数段的人数。 2、统计任意一门课的平均成绩。 代码如下: DELIMITER $$ CREATE PROCEDURE `scoreAvg`() BEGIN declare curname char(40) default null; /*临时存放课程名*/ declare curcno char(4) default null; /*临时存放课程号*/ declare curavg float; /*临时存放平均成绩*/ declare mycursor cursor for /*定义游标*/ select cno, cname from course;

实验6 存储过程创建与应用

学院:信息工程学院 专业:计算机科学与技术姓名:蔡启林 学号:201013432

实验六存储过程创建与应用 一、实验目的 使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。 二、实验内容 (1)利用企业管理器创建存储过程student_grade,要求实现如下功能:查询“学生-课程”数据库中每个学生各门功课的成绩,其中包括每个学生的sno,sname,cname,grade。 (2)利用查询分析器创建名为proc_exp的存储过程,要求实现如下功能:从sc表中查询某一学生考试平均成绩。 (3)修改存储过程proc_exp,要求实现如下功能:输入学生学号,根据该学生所选课程的平均成绩显示提示信息,即如果平均成绩在60分以上,显示“此学生综合成绩合格,成绩为XX分”,否则显示“此学生总和成绩不合格,成绩为XX分”。 (4)创建名为proc_add的存储过程,要求实现如下功能:向sc表中添加学生成绩记录。调用proc_add,向sc表中添加学生成绩记录。 (5)调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格。 (6)删除刚刚创建的proc_add和proc_exp两个存储过程。 三、实验过程 要求个人填写(要求有文字描述和适当的图片辅助说明) (1)

查询执行结果为: (2) 查询执行结果为:

(3) 查询执行结果为: (4)

查询执行结果为: (5)

(6) 四、实验总结 要求个人填写(实验中发现的问题和解决的办法) 通过这次试验我更加深刻的理解了存储过程的概念,SQL Sever中的存储过程与其他编程语言中的函数类似,就像是函数的调用,包含执行各种数据库操作的语句,并且可以调用其他的存储过程,接受输入参数并以输出参数的格式向调用过程或批处理返回多个值,向调用过程或批处理返回状态值,以指明成功或失败,把实现一些功能的语句封装起来,需要使用的时候进行调用,效率很高使用起来方便。创建存储过程有一定的设计规则,实验课中涉及的规则比较少,比较简单,有些复杂的规则还需在练习中遇到问题才能认识到。存储过程的相关语句有创建create procedure,修改alter procedure,执行execute,删除drop procedure等等,大体的框架掌握了之后,主要就是写T-SQL语句以实现相应的功能。在创建的时候要注意输入和输出参数,我在定义的时候忘记了out导致错误。仔细检查改过错误后就解决了这个问题,这次实验让我了解了使用存储过程的好处,让我再以后的数据库学习中更好的熟练掌握这门课。

6实验六 存储过程

实验六存储过程 一、实验目的 (1)掌握T-SQL流控制语句。 (2)掌握创建存储过程的方法。 (3)掌握存储过程的执行方法。 (4)掌握存储过程的管理和维护。 二、实验内容 1、创建简单存储过程 (1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。 if exists(select*from sysobjects where name='stu_pr'and type='P') begin drop procedure stu_pr print'已删除!' end else print'不存在,可创建!' create procedure stu_pr as select distinct*from Student s left join SC on s.Sno=SC.Sno left join Course c on https://www.360docs.net/doc/9d13301316.html,o=https://www.360docs.net/doc/9d13301316.html,o where Classno='051'

执行: exec stu_pr 2、创建带参数的存储过程 (1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。 if exists(select*from sysobjects where name='stu_proc1'and type='P') begin drop procedure stu_proc1 print'已删除!' end else print'不存在,可创建!'

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

南昌航空大学实验报告 二00 年月日 课程名称:数据库概论实验名称:数据库存储过程与触发器 班级:122031 姓名:同组人: 指导教师评定:签名: 一、实验环境 1.Windows2000或以上版本; 2.SQLServer 2005。 二、实验目的 熟悉不同数据库的存储过程和触发器,重点实践SQL Server2005,掌握SQL Server2005中有存储过程与触发器的相关知识。 三、实验要求 完成实验指导书中p115-7和p132 -4。 四、实验步骤及参考源代码 1.创建与执行存储过程 create procedure C_P_Proc as select distinct https://www.360docs.net/doc/9d13301316.html,o,cna,pna,num from paper,customer,cp where https://www.360docs.net/doc/9d13301316.html,o=https://www.360docs.net/doc/9d13301316.html,o and paper.pno=cp.pno and cna='李涛' or cna='钱金浩' go execute C_P_Proc 2.删除存储过程 drop procedure C_P_Proc 3.创建插入触发器 create trigger TR_PAPER_I ON PAKER12203125 FOR INSERT AS DECLARE @appr float DECLARE @apno int SELECT @appr=ppr,@apno=pno from inserted begin if @appr<0 or @appr is null begin

raiserror('报纸的单价为空或小于!',16,1) update paper set ppr=10 where paper.pno=@apno end end 4.创建删除触发器 create Trigger TR_PAPER_D on PAKER12203125 after delete as declare @ipno char(6) declare @icount int; select @icount= count(*) from deleted,cp where deleted.pno=cp.pno if @icount>=1 begin select @ipno=pno from deleted raiserror('级联删除cp表中的数据',16,1) delete from cp where cp.pno=@ipno end 5.创建修改触发器 create trigger TR_PAPER_U ON PAKER12203125 for update as declare @ippr float select @ippr=ppr from inserted if @ippr<0 or @ippr is null begin raiserror('输入单价不正确',16,1) rollback transaction end 6. 分别对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' 五、实验结果

实验六 存储过程和触发器

实验六存储过程和触发器 电子信息科学与技术罗滨志(120802010051) 一、实验目的 (1)理解存储过程和触发器的功能和特点; (2)学会使用Transact-SQL编写存储过程和触发器的方法; (3)学会如何使用管理平台创建存储过程和触发器; (4)掌握存储过程的创建、执行与删除; (5)掌握触发器的创建、修改和删除操作; (6)理解可以使用存储过程和触发器来维护数据完整性。 二、实验准备 (1)了解存储过程的基本概念和类型。 (2)了解创建存储过程的Transact —SQL语句的基本语法。 (3)了解查看、执行、修改和删除存储过程的基本语法。 (4)了解触发器的基本概念和类型。 (5)了解创建触发器的Transact —SQL语句基本用法。 (6)了解查看、修改和删除触发器的Transact —SQL语句的用法。 三、实验内容和步骤 1.创建存储过程stu_info,执行时通过输入姓名,可以查询该姓名对应的学生的各科成绩。SQL语句 create proc stu_info@sname varchar(20) as select grade from sc,student where student.sno=sc.sno and sname=@sname go 如图所示:

2. 使用studentsdb数据库中的student表,course表、sc表。 (1)创建一个存储过程stu_score,查询学号为2012001的学生的姓名,课程名称,分数。SQL语句 create proc stu_score@sno varchar(20) as select sname,cname,grade from sc,student,course where student.sno=sc.sno and https://www.360docs.net/doc/9d13301316.html,o=https://www.360docs.net/doc/9d13301316.html,o and student.sno=@sno go 如图所示:

第6章_存储过程与触发器练习题

有教师表(教师号,教师名,职称,基本工资),其中基本工资的取值与教师职称有关。实现这个约束的可行方案是( )。 A 在教师表上定义一个视图 B 在教师表上定义一个存储过程 C 在教师表上定义插入和修改操作的触发器 D 在教师表上定义一个标量函数 参考答案 C 在SQL SERVER中,执行带参数的过程,正确的方法为()。 A 过程名参数 B 过程名(参数) C 过程名=参数 D ABC均可 参考答案 A 在SQL SERVER服务器上,存储过程是一组预先定义并()的Transact-SQL语句。 A 保存 B 解释 C 编译 D 编写 参考答案 C 在SQL Server中,触发器不具有()类型。 A INSERT触发器 B UPDATE触发器 C DELETE触发器 D SELECT触发器 参考答案 D

()允许用户定义一组操作,这些操作通过对指定的表进行删除、插入和更新命令来执行或触发。 A 存储过程 B 规则 C 触发器 D 索引 参考答案 C 为了使用输出参数,需要在CREATE PROCEDURE语句中指定关键字( )。 A OPTION B OUTPUT C CHECK D DEFAULT 参考答案 B 下列( )语句用于创建触发器。 A CREATE PROCEDURE B CREATE TRIGGER C ALTER TRIGGER D DROP TRIGGER 参考答案 B 下列( )语句用于删除触发器。 A CREATE PROCEDURE B CREATE TRIGGER C ALTER TRIGGER D DROP TRIGGER 参考答案 D

实验六存储过程设计

嘉应学院计算机学院 2012年 12月12日 一、实验目的 通过实验掌握SQL SERVER存储过程的基本设计方法。 二、实验原理 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合,它被编译并存储为一个单一的数据库对象,可用存储过程实现批处理。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 游标(Cursor)它使用户可逐行访问由数据库返回的结果集。使用游标(cursor)的一个主要的原因就是把集合操作转换成单个记录处理方式。基本语法: create procedure 存储过程名 (参数表 ) as t_sql语句的集合 t_sql语句除SQL语句外,还可包括声明变量,流控制语句及游标等。 (注意:t_sql语句在不同的数据库系统中,语法不同)

三、实验环境 操作系统:Windows Server 2003 、Windows 7 编译环境:SQL Server Enterprise Manager 数据库管理系统:Microsoft SQL Server 2005 四、实验步骤及内容 1. 了解T_SQL语法 (1)变量 A.局部变量 例如:declare @v_sno nvarchar(20), @v_grade float /* 声明了两个局部变量 */ B.全局变量 如:@@error, @@fetch_status C.表变量 声明表类型变量的语句将该变量初始化为一个具有指定结构的空表。 例如: declare @Mytab table (id int primary key, books varchar(15) ) insert @Mytab values(1,'9901') insert @Mytab values(2,'9902')

创建存储过程与触发器

实验7 创建存储过程与触发器 实验日期和时间:2011-11-11 实验室:2#206 班级:09计本(4)学号:2009810182 姓名:周伟 实验环境: 1.硬件:1G内存 1.73GHz 2.软件:SQL server2008 实验原理: 创建存储过程,执行存储 通过建立触发器实现对数据库的更新。 实验任务: 此作业成绩得分根据你完成的任务的难度和数量评分,完成后在实验室给老师演示验收,课后提交电子版报告。如额外完成自拟题目应当事先将所拟题目提交给老师或在报告中明确标注题意。 假定有某个企业(或公司,或代理商)经销某类产品,需要用一个信息系统对销售业务和库存进行管理。 首先,他们得在数据库中存储所有经营过的产品的信息,并建立现有库存的信息表; 其次,对于每次销售或者进货,他们都得记录下来以便进行管理,将来对这些信息进行统计或财务管理;再次,在每笔销售记录中需要记录相关客户信息,在进货时需要记录相关供应商的信息,也为了与不同的供应商和客户进行联系,需要分别建立二者的信息表。综上所述,在以上建立的数据库中我们至少需要以下几个基本表: 1.产品表(记录公司曾经经营的所有产品信息) 2.现有库存表(记录公司目前经营的产品的现有库存信息) 3.出库单表(记录产品销售出库时的情况:时间、销售员、客户、商品编码、 商品数量等) 4.入库单表(记录公司每次产品进货入库时的信息) 5.供应商表(记录为公司供货的主要供应商信息) 6.客户表(记录公司的所有客户信息) 以下是供参考的表结构的部分信息,同学们可以根据题意自行修改表的结构 1.产品表(记录公司的产品信息) 字段名数据类型长度备注 产品编号文本主键 产品名称文本非空 类别文本 供应商编号文本外键(来自供应商表) 产地文本 最新参考单价货币

实验六管理存储过程11页word

实验六存储过程与触发器一、存储过程 【创建存储过程】: CREATE PROCEDURE [OWNER].[PROCEDURE NAME] AS 如:Use pubs Go Create procedure author_information As select au_lname,au_fname,title,pub_name from authors a join titleauthor ta on a.au_id=ta.au_id join titles t on t.title_id=ta.title_id join publishers p on t.pub_id=p.pub_id Go 【管理存储过程】: ?可以使用sp_helptext命令查看创建存储过程的文本信息。 Use pubs Go Sp_helptext author_information

Go ?可以用sp_help查看存储过程的一般信息。 Use pubs Go Sp_help author_information Go ?可以使用系统存储过程sp_rename修改存储过程的名字。 Use pubs Go Sp_rename author_information ,authors_information Go ?也可以使用企业管理浏览存储过程的信息,具体方法是: ?从树型结构上选中存储过程所在的数据库节点,展开该节点; ?选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所 有的存储过程; ?选中存储过程,右击,执行〖属性〗命令, 则系统将弹出如图所示对话框。 ?可以在对话框中修改存储过程内容,并保 存修改。 ?如果想知道某个表被存储过程引用的情 况,可以使用sp_depends, Sp_depends authors

实验六-存储过程

实验六、存储过程 一、实验目的 (1)掌握T-SQL流控制语句。 (2)掌握创建存储过程的方法。 (3)掌握存储过程的执行方法。 (4)掌握存储过程的管理与维护。 二、实验内容 1、创建简单存储过程 创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生选课信息(含未选课同学的信息)。要求在创建存储过程前判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。

2、创建带参数的存储过程 (1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄、选修课程名、成绩。系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。执行该存储过程,用多种参数加以测试。

(2)创建一个名为student_sc的存储过程,可查询出某学号段的同学的学号、姓名、总成绩。(学号起始号与终止号在调用时输入,可设置默认值。)执行该存储过程。 3、创建带输出参数的存储过程 (1)创建一个名为course_average的存储过程,可查询某门课程考

试的平均成绩。总成绩可以输出,以便进一步调用。 (2)创建一执行该存储过程的批处理,要求当平均成绩小于60时,显示信息为:“XX课程的平均成绩为:XX,其平均分未达60分”。超过60分时,显示信息为:“XX课程的平均成绩为:XX”。

4、创建带重编译及加密选项的存储过程 创建一个名为update_sc、并带重编译及加密选项的存储过程,可更新指定学号、指定课程号的学生的课程成绩。(学号、课程号在调用时输入)

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

实验五:触发器和存储过程 一、实验目的:理解触发器和存储过程的含义,掌握用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))

相关文档
最新文档