6实验六 存储过程
实训六存储过程
实训六:存储过程1.实训目的1)通过对常用系统存储过程的使用,了解存储过程的类型;2)通过创建和执行存储过程,了解存储过程的基本概念,掌握使用存储过程的操作技巧和方法;3)通过对已创建的存储过程的改变,掌握修改存储过程的操作技巧和方法;2.实训工具SQL Server2005SQL Server Management Studio。
3 实训内容(保存操作过程程序设计语句和结果)1、使用sp_helptext查看byroyalty存储过程的文本,该存储过程在数据库pubs中。
2、在学生库中创建存储过程proc_8_t1,要求实现如下功能:产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、学分、学号、姓名、系别、性别等。
并调用此存储过程,显示执行结果。
3、在学生库中创建存储过程proc_8_t2,要求实现如下功能:输入系号,产生该系学生的选课情况列表,其中包括系号、学号、姓名、课程号、课程名、成绩、学分等。
并调用此存储过程,显示信息系号为‘20’的所有学生的选课情况列表。
4、在学生库中创建存储过程proc_8_t3,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生学分不足!”,否则显示“此学生学分已足!”。
并调用此存储过程,显示“1002”学生的总学分情况。
对学生库中已创建的存储过程proc_8_t1进行修改,要求在显示列表中增加教师字段,即产生学分为’4’的课程学生选课情况列表,其中包括课程号、课程名、授课教师号(TNO)、学分、学号、姓名、系别、专业、性别等。
5、对学生库中已创建的存储过程proc_8_t2进行修改,要求实现如下功能:输入课程名称,产生选修该课程所有男生的选课情况列表,其中包括学号、姓名、性别、课程号、课程名、成绩、学分等。
并调用修改后的存储过程,显示选修“离散数学”男生的选课情况列表。
6、对学生成绩库中已创建的存储过程proc_8_t3进行修改,要求实现如下功能:输入学生学号,根据该学生所选课程的总学分显示提示信息,如果总学分<9,则显示“此学生所选总学分为XXX,学分不足!”,否则显示“此学生所选总学分为XXX,学分已足!”。
存储过程的使用 实验报告
1、根据实验情况和实验报告质量作出写事性评价
2、评分
综合评分
折合成等级
指导教师签名:
时间: 年 月 日
--声明四个变量,用于保存输入和输出参数
DECLARE@KECHENGMINGvarchar(20)
DECLARE@AVGCHENGJI1tinyint
DECLARE@MAXCHENGJI1tinyint
DECLARE@MINCHENGJI1tinyint
--为输入参数赋值
SELECT@KECHENGMING='计算机基础'
@MINCHENGJI1AS最低成绩
GO
执行后结果如下:
表 3-1
4.删除存储过程
DROPPROC单科成绩分析
五、实验原始数据记录和处理
课程注册表:
表 4-1
六、实验结果与分析
表 5-1
表 5-2
由上述的两个表格可知:该存储过程是正确的
七、心得体会
通过本次实验,我对带输入输出参数的存储过程有了进一步的了解,对存储过程的创建、使用、修改和删除也更为熟练。在实验过程中,我明白了实验应该要有明确的思路:
GO
USEypp7
--声明四个变量,用于保存输入和输出参数
DECLARE@KECHENGMINGvarchar(20)
DECLARE@AVGCHENGJI1tinyint
DECLARE@MAXCHENGJI1tinyint
DECLARE@MINCHENGJI1tinyint
--为输入参数赋值
SELECT@KECHENGMING='高等数学'
@MINCHENGJItinyintOUTPUT
实验六 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)beginselect 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)beginupdate stu set stuno=stuno+n;end //delimiter ;5.delimiter //create procedure addstu(in sno int)begincase snowhen 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 //delimiter ;6.(1).delimiter //create procedure add5stu1()begindeclare num1 int;set num1=0;loop_label:loopinsert into stu values (111,'111',20);set num1=num1+1;if num1>=5 then leave loop_label;end if;end loop;end //delimiter ;(2).delimiter //create procedure add5stu2()begindeclare num2 int;set num2=0;while num2<5 doinsert into stu values (222,'222',20);set num2=num2+1;end while;end //delimiter ;(3).delimiter //create procedure add5stu3()begindeclare num3 int;set num3=0;repeatinsert into stu values (333,'333',20);set num3=num3+1;until num3>=5end repeat;end //delimiter ;四、实验小结本次试验让我好好补习了下前段时间落下的课程,让我对数据库有了新的体会和认识,试验中碰到了一些问题,但都已解决和理解。
网络数据库实验六存储过程
实验:存储过程实验学时:2个学时实验类型:(验证、综合、设计)一、内容概述:1、存储过程简介存储过程是存储于数据库中的一组T-SQL语句。
有了存储过程之后,与数据库的交互就没有必要在程序中写一堆的SQL语句,而只需用一条语句调用适当的存储过程来完成就可以了。
另外,由于代码是存储在数据库中,我们也可以在不同的应用程序或查询窗口中不断的重复利用那些代码。
存储过程功能的优点①预编译执行程序。
SQL Server只需要对每一个存储过程进行一次编译,然后就可以重复使用执行计划。
这个特点通过重复调用存储程序极大地提高了程序的性能。
②缩短客户端/服务器之间的信息传输量。
如果你的工作环境带宽有限,那么存储过程技术肯定能够满足你,因为它能够把需要传输的长的SQL查询缩短成一行。
③有效重复使用代码和编程。
存储过程可以为多个用户所使用,也可以用于多个客户程序。
这样可以减少程序开发周期的时间。
④增强安全性控制。
可以允许用户单独执行存储过程,而不给于其访问表格的权限。
2、创建存储过程语法CREATE PROC[ EDURE ] [ owner. ] procedure_name [ ; number ][ { @parameter data_type }[ VARYING ] [ = default ] [ OUTPUT ]] [ ,...n ][ WITH{ RECOMPILE | ENC RYPTION | RECOMPILE , ENC RYPTION } ][ FOR REPLICATION ]AS sql_statement [ ...n ]示例:AjaxCity表ID CityName Short1 苏州市SZ2 无锡市WX3 常州市CZ⑴.选择表中所有内容并返回一个数据集CREATE PROCEDURE mysp_AllASselect * from AjaxCityGO执行结果⑵.根据传入的参数进行查询并返回一个数据集CREATE PROCEDURE mysp_para@CityName varchar(255),@Short varchar(255)ASselect * from AjaxCity where CityName=@CityName And Short=@ShortGO执行结果⑶.带有输出参数的存储过程(返回前两条记录的ID的和)CREATE PROCEDURE mysp_output@SUM int outputASselect @SUM=sum([ID]) from (select top 2 * from AjaxCity) as tmpTable GO执行结果二、实验报告实验报告课程名称网络数据库SQL Server2005实验名称存储过程实验时间________年____月____日成绩一、实验目的1、熟悉存储过程基本概念和类型。
实验六管理存储过程11页word
实验六存储过程与触发器一、存储过程【创建存储过程】:CREATE PROCEDURE [OWNER].[PROCEDURE NAME]AS <SQL块>如:Use pubsGoCreate procedure author_informationAsselect au_lname,au_fname,title,pub_namefrom authors ajoin titleauthor taon a.au_id=ta.au_idjoin titles ton t.title_id=ta.title_idjoin publishers pon t.pub_id=p.pub_idGo【管理存储过程】:➢可以使用sp_helptext命令查看创建存储过程的文本信息。
Use pubsGoSp_helptext author_informationGo➢可以用sp_help查看存储过程的一般信息。
Use pubsGoSp_help author_informationGo➢可以使用系统存储过程sp_rename修改存储过程的名字。
Use pubsGoSp_rename author_information ,authors_informationGo➢也可以使用企业管理浏览存储过程的信息,具体方法是:✧从树型结构上选中存储过程所在的数据库节点,展开该节点;✧选中数据库节点下的〖存储过程〗节点,则右边的列表列出了数据库中目前所有的存储过程;✧选中存储过程,右击,执行〖属性〗命令,则系统将弹出如图所示对话框。
✧可以在对话框中修改存储过程内容,并保存修改。
✧如果想知道某个表被存储过程引用的情况,可以使用sp_depends,Sp_depends authors✧如果想知道某个存储过程引用表的情况,则可以使用Sp_depends procedure_name【执行存储过程】:对于存储过程的调用,应使用EXECUTE或EXEC关键字。
实验六-存储过程与触发器
实验六存储过程和触发器1.实验目的(1) 掌握存储过程和触发器的基本概念和功能(2) 掌握创建,管理存储过程的方法(3) 掌握创建,管理触发器的方法2.实验内容及步骤(1) 利用SQL Server Management Studio创建一个存储过程ProcNum,查询每个班级中学生的人数,按班级号升序排序.在查询编辑器的存储过程模板中输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcNum ASSELECT classno,COUNT(*)AS number FROM studentGROUP BY classno ORDER BY classno ASCGOEXEC ProcNum(2) 利用Transact-SQL语句创建一个带有参数的存储过程ProcInsert,向score 表插入一条选课记录,并查询该学生的姓名,选课的所有课程名称,平时成绩和期末成绩.<1> 在查询编辑器输入如下创建存储过程的代码并执行.USE teachingGOCREATE PROCEDURE ProcInsert(@sno NCHAR(10),@cno NCHAR(6),@usually NUMERIC(6,2),@final NUMERIC(6,2))ASINSERT INTO score VALUES (@sno,@cno,@usually,@final)SELECT sname,cname,usually,finalFROM student s,course c,score scWHERE 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. 了解存储过程的基本概念和作用。
2. 掌握存储过程的创建、执行和修改方法。
3. 学会使用存储过程进行数据库操作,提高数据库操作效率。
二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 5.73. 开发工具:MySQL Workbench三、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程四、实验步骤1. 创建存储过程(1)打开MySQL Workbench,连接到本地数据库。
(2)在查询窗口中输入以下SQL语句创建一个存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT FROM students;END //DELIMITER ;(3)执行以上SQL语句,成功创建存储过程。
2. 执行存储过程(1)在查询窗口中输入以下SQL语句执行存储过程:CALL SelectAllStudents();(2)观察查询结果,确认存储过程执行成功。
3. 修改存储过程(1)打开查询窗口,输入以下SQL语句修改存储过程:DELIMITER //CREATE PROCEDURE SelectAllStudents()BEGINSELECT id, name, age FROM students;END //DELIMITER ;(2)执行以上SQL语句,成功修改存储过程。
4. 删除存储过程(1)在查询窗口中输入以下SQL语句删除存储过程:DROP PROCEDURE IF EXISTS SelectAllStudents;(2)执行以上SQL语句,成功删除存储过程。
五、实验总结1. 通过本次实验,我们了解了存储过程的基本概念和作用,学会了创建、执行、修改和删除存储过程的方法。
2. 存储过程可以提高数据库操作效率,降低代码重复性,提高代码可维护性。
3. 在实际开发过程中,合理使用存储过程可以简化数据库操作,提高应用程序的性能。
实验6存储过程的应用-实验报告
图三、返回指定课程的平均成绩成功
4.执行系统存储过程sp_help查看存储过程2的一般信息
代码及结果如下:
图四、查看存储过程2的一般信息
5.执行系统存储过程sp_helptext查看存储过程2的定义
实验内容:
本次实验之前的实验中我已经创建了mydb数据库,因此本次实验我不再提及mydb数据库的创建过程,接下来我们进入实验。
1.创建存储过程:查找1985年以后出生的学生的信息,代码及结果如下
:
图一、创建存储过程成功
2.用T-SQL语句在表department中创建插入的存储过程
代码及结果如下:
图二、创建插入的存储过程
1.创建存储过程:查找1985年以后出生的学生的信息
2.用T-SQL语句在表department中创建插入的存储过程
3.用T-SQL语句创建存储过程:要求返回指定课程的平均成绩,其中指定课程号以存储过程的输入参数进行传递。
4.执行系统存储过程sp_heቤተ መጻሕፍቲ ባይዱp查看存储过程2的一般信息
5.执行系统存储过程sp_helptext查看存储过程2的定义
《数据库系统应用设计》实验报告(六)
班级:08计科(2)班
姓名:杨进林
学号:08410902049
时间:2011-5-15
地点:综合实验楼二楼
实验成绩:优秀□良好□中□及格□不及格□
实验题目:1、存储过程的应用
实验目的:1、掌握创建存储过程的方法。
2、掌握存储过程的使用
实验要求:
在mydb数据库中:
代码及结果如下:
实验六 存储过程创建与应用
实验六存储过程创建与应用一、实验目的使学生理解存储过程的概念,掌握创建存储过程的使用、执行存储过程和查看、修改、删除存储过程的方法。
二、实验内容(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)创建存储过程student_grade:查询每个学生各门功课的成绩(部分查询结果):(2)创建存储过程proc_exp:查询某一学生考试平均成绩(部分结果):(3)修改存储过程proc_exp调用存储过程proc_exp,输入学生学号,显示学生综合成绩是否合格(4)创建名为proc_add的存储过程:添加学生记录:(5)删除刚刚创建的proc_add和proc_exp两个存储过程。
四、实验总结在创建proc_exp存储过程时,需要添加group by语句对结果进行分组,不然会出现错误。
当调用存储过程proc_exp,输入学号查询学生综合成绩是否合格时,出现错误:“Conversion failed when converting the varchar value '77.500000' to data type int.”看到该错误时自己清楚是数据类型不匹配导致,经过仔细分析之后终于明白是自己更改pro_exp存储结构中的if @avg>=60语句不正确,因为在创建表的时候,定义的学生成绩的数据类型为decimal(5,2),即最大5位数字,其中2位小数,定义的变量avg类型为varchar(20),在将该语句修改为if @avg>=60.00后,查询成功。
实验六存储过程和触发器
实验六存储过程和触发器142208100149 陈聪1、目的与要求(1)掌握存储过程的使用方法。
(2)掌握触发器的使用方法。
2、实验准备(1)了解存储过程的使用方法。
(2)了解触发器的使用过程。
(3)了解inserted逻辑表和deleted逻辑表的使用。
(4)了解如何编写CRL存储过程与触发器。
3、实验内容。
(1)存储过程。
①创建存储过程,使用Employees表中的员工人数来初始化一个局部变量,并调用这个存储过程。
注:此段T-SQL命令,书上变量名书写错误,漏掉了下划线。
(@nu_MBER1和@nu MBER1区别)执行该存储过程,并查看结果。
②创建存储过程,比较两个员工的实际收入,若前者比后者高就输出0,否则输出1.执行该存储过程并查改结果。
③创建添加职员记录的存储过程EmployeeAdd。
执行该存储过程。
执行上面T-SQL命令,在结果栏中显示一行受影响,说明结果已经插入成功,在表Employees中也够看到结果已经存在。
④创建存储过程,使用游标确定一个员工的实际收入是否排在前3名。
结果为1表示是,结果为0表示否。
执行该存储过程,在结果栏中显示,命令已成功完成,并且在左侧对象资源管理器中进行刷新会显示刚刚创建的存储过程。
执行该存储过程:上面T-SQL结果中输出“1”,代表着员工“108991”的实际收入排在前三名。
【思考与练习】A、创建存储过程,要求当一个员工的工作年份大于6年时,将其转到经理办公室工作。
创建这个存储过程时候,在存储过程的条件判断中我添加了一项,判断工作年份在6年以上的员工是否在经理办公室,只有不在经理办公室的时候才进行调整,这样更符合实际问题些。
然后执行上面的存储过程,并且查看结果:此时有可能会出现(我就出现了)这样的问题,在之前实验三中就出现了。
解决方法同样是解除规则的绑定。
查看表Employees中员工“000001”的DepartmentID已经修改为“3”(经理办公室)。
存储过程、触发器和函数实验讲述
存储过程、触发器和用户自定义函数实验实验内容一练习教材中存储过程、触发器和用户自定义函数的例子。
教材中的BookSales数据库,在群共享中,文件名为BookSales.bak。
实验内容二针对附件1中的教学活动数据库,完成下面的实验内容。
1、存储过程(1)创建一个存储过程,该存储过程统计“高等数学”的成绩分布情况,即按照各分数段统计人数。
(2)创建一个存储过程,该存储过程有一个参数用来接收课程号,该存储过程统计给定课程的平均成绩。
(3)创建一个存储过程,该存储过程将学生选课成绩从百分制改为等级制(即A、B、C、D、E)。
(4)创建一个存储过程,该存储过程有一个参数用来接收学生姓名,该存储过程查询该学生的学号以及选修课程的门数。
(5)创建一个存储过程,该存储过程有两个输入参数用来接收学号和课程号,一个输出参数用于获取相应学号和课程号对应的成绩。
2、触发器(1)为study表创建一个UPDATE触发器,当更新成绩时,要求更新后的成绩不能低于原来的成绩。
(2)为study表创建一个DELETE触发器,要求一次只能从study表中删除一条记录。
(3)为course表创建一个INSERT触发器,要求插入的课程记录中任课教师不能为空。
3、用户自定义函数(1)创建一个返回标量值的用户定义函数 RectangleArea:输入矩形的长和宽就能计算矩形的面积。
create function RectangleArea(@a int,@b int)returns intasbeginreturn@a*@bend(2)创建一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。
该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。
调用这个函数,生成相应的报表并给用户浏览。
create function student_table()returns tableasreturn(select student_course.tcid课程号,ame课程名,COUNT(student_course.sno)选修人数,max(student_course.score)最高分,min(student_course.score)最低分,avg(student_course.score)平均分from student_course,coursewhere student_course.tcid=ogroup by student_course.tcid,ame)实验数据库说明教学活动数据库包括student、course和study三个基本表,三个基本表的结构说明和数据如下:(1)学生表(student)学生表的结构列名数据类型长度是否允许为空值字段说明sno char 5 NO 学号sname char 8 NO 姓名age smallint 年龄sex nchar 1 性别说明:sno为主键,age的范围为15~35之间,sex只能为“男”或“女”。
实验六 SQL Server中的存储过程及应用
实验报告
2011 – 2012 学年第 2 学期任课老师:
课程名称数据库系统原理班级座号姓名
实验六 SQL Server中
实验时间
实验题目
的存储过程及应用
实验目的、要求
1)掌握存储过程的创建与执行。
2)熟悉存储过程与批处理的区别。
3)掌握带参数的存储过程的创建与执行。
实验设计内容
二、实验内容及步骤
1)在Sql Server中新建查询,粘贴“实验6.sql”并执行。
2)创建一个存储过程,要求查询所有学生的详细信息。
3)创建一个存储过程,要求查询每位学生所选课程的平均成绩
4)创建一个存储过程,要求查询每位学生所选课程的最高成绩
5)创建一个存储过程,要求查询每位学生所选课程的最高成绩以及所对应的课程名称。
6)创建一个存储过程,要求查询制定学号的学生详细信息。
7)创建一个存储过程,要求查询所选课程成绩不合格的学生详细信息。
8)创建一个存储过程,要求向XSQK表插入一条学生记录。
9)创建一个存储过程,要求能够实现输出制定学生所选课程的平均分、最高分和最低分。
10)创建一个存储过程,要求能够实现对输入的两个数求和,并将结果输出。
11)创建一个存储过程,要求能够实现将两个字符串连接成一个字符串,并将结果输出。
总结以及心得体会
通过这次实验,让我深刻了解了数据库的功能,觉得它功能非常的强大,掌握存储过程的创建与执行,熟悉存储过程与批处理的区别。
掌握带参数的存储过程的创建与执行.
指导老师评阅意见
指导老师:年月日
填写内容时,可把表格扩大。
实验的源程序代码(要有注释)附在表后。
整理实验六-存储过程和触发器
实验六存储过程和触发器整理表姓名:职业工种:申请级别:受理机构:填报日期:A4打印/ 修订/ 内容可编辑《大型数据库》课程教学大纲课程简介Microsoft SQL Server 2000是一个客户机/服务器关系型数据库系统,它使用Transact-SQL语言在客户机与SQL Server数据库服务器之间发送请求。
SQL Server 2000是Microsoft 公司推出的一个全新的数据库服务器产品,是一个企业级的网络关系型数据库管理系统,该产品拥有的种种新特性使它成为数据库服务器产品中的佼佼者,并且越来越得到广大用户的青睐。
SQL SERVER2000推出后广受欢迎.它使用了最先进的数据库构架,与windowsNT/2000平台紧密集成,具有完全的WEB功能,人们用它可方便地管理数据库和开发应用程序.它通过对高端硬件平台,网络和存储技术的支持,能在INTERNET商业领域快速建立应用.此外,还增强了安全性,支持基于角色的安全并拥有安全审计工具。
如果作为一般的程序应用,SQL SERVER2000是非常方便的,但要作为系统管理员,要掌握这样一个复杂而庞大的系统管理,需要进行大量的学习与实践.本课程在学生已初步掌握SQL SERVER 数据库对象的基础上,重点介绍SQL SERVER这一大型数据库的系统管理,为以后从事有关方面的工作打下良好的基础。
课程大纲一、课程的性质和任务:本课程作为计算机科学与技术的专业课程,主要任务是讲授如何使用SQL Server 2000 进行程序设计以及对数据库进行适当地管理。
通过理论指导和上机实践相结合的方式,使学生能熟练使用Transact-SQL语言并能进行简单编程;掌握保证数据完整性和数据安全性的技术;掌握数据库常规管理技术;了解客户端开发工具与大型数据库(SQL SERVER 2000)配合开发数据库应用系统的关键技术。
二、课程的目的与基本要求:1.了解SQL Server 2000的特点、组成等。
存储过程实验报告_总结(3篇)
第1篇一、实验背景随着数据库技术的不断发展,存储过程在数据库管理中的应用越来越广泛。
存储过程是一组为了完成特定功能的SQL语句集合,它具有提高数据库性能、增强安全性、简化应用开发等优点。
为了更好地掌握存储过程的应用,我们进行了本次实验。
二、实验目的1. 理解存储过程的概念、特点和应用场景。
2. 掌握存储过程的创建、执行、修改和删除方法。
3. 学习使用存储过程实现常见的数据库操作,如数据插入、查询、更新和删除。
4. 熟悉存储过程中的流程控制语句、循环语句和游标操作。
三、实验环境1. 操作系统:Windows 102. 数据库:MySQL 5.73. 开发工具:MySQL Workbench四、实验内容1. 创建存储过程2. 执行存储过程3. 修改存储过程4. 删除存储过程5. 存储过程中的流程控制语句6. 存储过程中的循环语句7. 存储过程中的游标操作五、实验步骤1. 创建存储过程首先,我们创建一个简单的存储过程,用于查询特定部门的所有员工信息。
```sqlCREATE PROCEDURE GetEmployeeInfo(IN dept_id INT)BEGINSELECT FROM employees WHERE department_id = dept_id;END;```在此过程中,我们使用了`IN`参数,表示该参数在调用存储过程时传入。
2. 执行存储过程创建存储过程后,我们可以通过以下命令执行它:```sqlCALL GetEmployeeInfo(10);```这将查询部门ID为10的所有员工信息。
3. 修改存储过程如果需要修改存储过程,可以使用`ALTER PROCEDURE`语句。
例如,将查询条件修改为按姓名查询:```sqlALTER PROCEDURE GetEmployeeInfo(IN emp_name VARCHAR(50))BEGINSELECT FROM employees WHERE name = emp_name;END;```4. 删除存储过程删除存储过程可以使用`DROP PROCEDURE`语句。
数据库实验-存储过程、触发器
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.触发器的创建与使用
实验6 数据库实验——存储过程和触发器
实验6 存储过程和触发器一、实验目的1、加深和巩固对存储过程和触发器概念的理解。
2、掌握触发器的简单应用。
3、掌握存储过程的简单应用。
二、实验内容一)存储过程:1. 创建一存储过程,求l+2+3+…+n,并打印结果。
CREATE PROCEDURE addresultASDECLARE @n int=10,/*最后一个数*/@i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO2.调用上面的addresult存储过程,打印l十2+3+…+10的结果。
EXEC addresult3. 修改上述存储过程为addresult1,使得@n为输入参数,其具体值由用户调用此存储过程时指定。
CREATE PROCEDURE addresult1@n int=10 /*最后一个数*/ASDECLARE @i int=0,@result int=0 /*结果*/BEGINWHILE(@i<=@n)BEGINSET @result=@result+@iSET @i=@i+1ENDPRINT'1+2+3+...+n的结果是:'PRINT @resultRETURN(@result)ENDGO4. 调用上面修改后的addresult1存储过程,打印l+2+3+ (100)结果。
EXEC addresult1 1005.修改上述存储过程为addresult2,将@n参数设定默认值为10,并改设@sum为输出参数,让主程序能够接收计算结果。
CREATE PROCEDURE addresult2@n int=10,/*最后一个数*/@sum int out/*结果*/ASDECLARE @i int=0BEGINset @sum=0WHILE(@i<=@n)BEGINSET @sum=@sum+@iSET @i=@i+1ENDENDGO6.调用上面修改后的addresult2存储过程,设置变量@s接收计算l+2+3+…+10的结果。
实验6 游标、存储过程和触发器
实验六游标、存储过程与触发器
一、实验目的
掌握使用T-SQL实现游标、存储过程和触发器的创建,使用方法。
二、实验内容
在实验一、实验二创建的表中用T-SQL语句完成以下内容:
1.使用游标实现将及格的选课信息输出。
2.使用游标将SPJ表中的偶数行输出。
3.创建存储过程,查询赵永亮所修课程的课程信息,将课程号和课程名输出。
4.创建存储过程,统计指定学生修课的平均成绩和选课门数,将统计的结果用输出参数返回。
5.创建存储过程,在学生表Student中插入一条完整的元组。
6.创建存储过程,根据用户指定的供应商号删除SPJ表中相应的供货信息。
7.创建存储过程,将指定零件的重量增加指定的值。
8.用触发器实现约束:如果是北京的供应商,供应任何零件的数量不能少于300,如果少于则自动改为300。
9.在SC关系中增加新属性列Status,用来记录课程成绩的等级,0-59分为“不合格”,60-69为“合格”,70-89为“良好”,90以上为“优秀”。
要求status属性列的值由用户在插入、更新选课成绩时系统自动填写和更新。
6实验六 存储过程
实验六存储过程之阿布丰王创作一、实验目的(1)掌握T-SQL流控制语句。
(2)掌握创建存储过程的方法。
(3)掌握存储过程的执行方法。
(4)掌握存储过程的管理和维护。
二、实验内容1、创建简单存储过程(1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包含学生的基本信息、学生的选课信息(含未选课同学的信息)。
要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。
if exists(select*from sysobjects where name='stu_pr'and type=' P')begindropprocedure stu_prprint'已删除!'endelseprint'不存在,可创建!'createprocedure stu_prasselectdistinct*from Studentsleftjoin SC on s.Sno=SC.Snoleftjoin Coursec on o=owhere Classno='051'执行:exec stu_pr2、创建带参数的存储过程(1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。
系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。
执行该存储过程,用多种参数加以测试。
if exists(select*from sysobjects where name='stu_proc1'and typ e='P')begindropprocedure stu_proc1print'已删除!'endelseprint'不存在,可创建!'createprocedure stu_proc1@sdept varchar(10)='%',@sname varchar(10)='林%'asselect Sname,s.Sno,YEAR(getdate())-YEAR(Birth)Age,Cname,Gradefrom Students,Coursec,SCwhere s.Sno=sc.Sno and o=oand s.Sname like@sname and s.Sdept like@sdept执行:①、exec stu_proc1②、exec stu_proc1@sdept='%',@sname='林%'(2)创建一个名为Student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成绩。
实验教案-实验六(存储过程和触发器)
1)存储过程的创建与执息(其中课程名,返回值自行设计)
(2)建立存储过程P2,将某班的所有学生的成绩放在一个临时表中。
(3)建立存储过程P3,计算某一个专业的某一门课和的平均成绩,显示出专业名称、课程名称和平均成绩
(三)实验内容
实验数据:dept、class、student、course和SC五 个表及实验三插入到表中的数据
实验内容:
1、存储过程的建立和执行
分别建立有没参数、有参数(定义缺省和不定义缺省)、有返回值的存储过程。存储过程的执行
2、触发器的创建与执行
各类触发器分别建立一个,再设计一组有效和无效的操作数据 ,触发各个触发器执行
(3)对视图的操作
2、难点:
设计一系列操作触发触发器的执行。
四、仪器设备及用具
硬件:每位同学分配PC机一台
软件:windows环境安装好SQL Server
五、教学过程
(一)实验预习
(1)熟悉SQL中的创建存储过程和触发器的SQL语句
(2)准备好实验所用的数据库及原始数据
(二)实验原理
在查询分析器下利用SQL命令完成对所要求的存储过程的创建和执行,完成触发器的执行和设计相应操作触发触发器的执行。
insert into #class11 select * from sc
where sno in (select sno from student where classno=@classno1)
select * from #class11
end
触发器示例:
alter trigger in_sc on sc for insert,update
begin
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六存储过程一、实验目的(1)掌握T-SQL流控制语句。
(2)掌握创建存储过程的方法。
(3)掌握存储过程的执行方法。
(4)掌握存储过程的管理和维护。
二、实验内容1、创建简单存储过程(1)创建一个名为stu_pr的存储过程,该存储过程能查询出051班学生的所有资料,包括学生的基本信息、学生的选课信息(含未选课同学的信息)。
要求在创建存储过程前请判断该存储过程是否已创建,若已创建则先删除,并给出“已删除!”信息,否则就给出“不存在,可创建!”的信息。
if exists(select*from sysobjects where name='stu_pr'and type='P') begindrop procedure stu_prprint'已删除!'endelseprint'不存在,可创建!'create procedure stu_prasselect distinct*from Student sleft join SC on s.Sno=SC.Snoleft join Course c on o=owhere Classno='051'执行:exec stu_pr2、创建带参数的存储过程(1)创建一个名为stu_proc1的存储过程,查询某系、某姓名的学生的学号、姓名、年龄,选修课程名、成绩。
系名和姓名在调用该存储过程时输入,其默认值分别为“%”与“林%”。
执行该存储过程,用多种参数加以测试。
if exists(select*from sysobjects where name='stu_proc1'and type='P') begindrop procedure stu_proc1print'已删除!'endelseprint'不存在,可创建!'create procedure stu_proc1@sdept varchar(10)='%',@sname varchar(10)='林%'asselect Sname,s.Sno,YEAR(getdate())-YEAR(Birth)Age,Cname,Grade from Student s,Course c,SCwhere s.Sno=sc.Sno and o=oand s.Sname like@sname and s.Sdept like@sdept执行:①、exec stu_proc1②、exec stu_proc1@sdept='%',@sname='林%'(2)创建一个名为Student_sc的存储过程,可查询出某段学号的同学的学号、姓名、总成绩。
(学号起始号与终止号在调用时输入,可设默认值)。
执行该存储过程。
if exists(select name from sysobjects where name='Student_sc'and type='P')drop procedure Student_scgocreate procedure Student_sc@sno_begin varchar(10)='20110001',@sno_end varchar(10)='20110103' asselect s.Sno,Sname,SUM(grade)total_gradefrom Student s,SCwhere s.Sno=sc.Sno and s.Sno between@sno_begin and@sno_endgroup by s.Sno,Sname执行:exec Student_sc3、创建带输出参数的存储过程(1)创建一个名为Course_sum的存储过程,可查询某门课程考试的总成绩。
总成绩可以输出,以便进一步调用。
if exists(select name from sysobjects where name='Course_sum'and type='P')drop procedure Course_sumcreate procedure Course_sum@cname varchar(10)='%'asselect SUM(grade)total_grade,COUNT(sno)snofrom Course c,SCwhere o=o and Cname like@cname执行:exec Course_sum'高数'(2)创建一执行该存储过程的批处理,要求当总成绩小于100时,显示信息为:“XX课程的总成绩为:XX,其总分未达100分”。
超过100时,显示信息为:“XX课程的总成绩为:XX”。
create procedure sum_grade2@cname varchar(10),@@sum smallint outputasselect@@sum=sum(grade)from Course c,SCwhere o=o and Cname like@cnamedeclare@@sumgrade smallintexec sum_grade2'高数',@@sumgrade outputif@@sumgrade<100beginprint'高数的总成绩为:'+CAST(@@sumgrade AS varchar(20))+',其总分未达到分。
'endelseprint'高数的总成绩为:'+CAST(@@sumgrade AS varchar(20))+'。
'4、创建带重编译及加密选项的存储过程创建一个名为update_sc、并带重编译及加密选项的存储过程,可更新指定学号、指定课程号的学生的课程成绩。
(学号、课程号由调用时输入)if exists(select name from sysobjects where name='update_sc'andtype='P')drop procedure update_sccreate procedure update_sc@cno varchar(10),@sno varchar(10),@grade intwith recompile,encryption--重编译,加密asupdate SCset grade=@gradewhere o=@cno and SC.Sno=@snoexec update_sc'001','20110001','80'5、使用T-SQL语句管理和维护存储过程(1)使用sp_helptext查看存储过程Student_sc的定义脚本sp_helptext Student_sc(2)使用select语句查看Student_sc存储过程的定义脚本(提示:通过查询表sysobjects 和表syscomments)select o.id,c.textfrom sysobjects o inner join syscomments con o.id=c.idwhere o.type='p'and ='Student_sc'(3)将存储过程stu_pr改为查询学号为2011001的学生的详细资料。
alter procedure stu_pr@sno varchar(10)asselect distinct*from Studentwhere Sno='20110001'exec stu_pr@sno='2011001'(4)删除存储过程stu_pr。
drop procedure stu_pr6、使用SQL Server Management Studio管理存储过程(1)在SQL Server Management Studio中重新创建刚删除的存储过程stu_pr选择数据库Student_info→可编程性→存储过程,右击“存储过程”→新建存储过程出现如下画面:修改存储过程的名称为stu_pr修改SQL语句,使之成为完整的存储过程CREATE PROCEDURE stu_pr-- Add the parameters for the stored procedure hereASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements.SET NOCOUNT ON;-- Insert statements for procedure hereSELECT distinct*from Student sleft join SC on s.Sno=SC.Snoleft join Course c on o=owhere Classno='051'END(2)查看存储过程stu_pr,并将该过程修改为查询051班女生的所有资料。
可编程性→存储过程→stu_pr,右击stu_pr→修改出现如下画面:修改SQL语句,使之能查询051班所有女生的资料的存储过程ALTER PROCEDURE[dbo].[stu_pr]-- Add the parameters for the stored procedure hereASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements.SET NOCOUNT ON;-- Insert statements for procedure hereSELECT distinct*from Student sleft join SC on s.Sno=SC.Snoleft join Course c on o=owhere Classno='051'and Sex='女'END(3)删除存储过程stu_pr选择存储过程stu_pr,右击,选择“删除”。