《实训九 存储过程的创建和使用》由会员分享,可在线阅读,更多相关《实训九 存储过程的创建和使用(10页珍藏版)》请在金锄头文库上搜索。
1、1网络数据库 实训报告日期: 2010 年 12 月 15 日 班 级: 09 级计算机信息管理 学 号姓 名指导老师实训地点成绩38庄维瀚罗小平教 A505实训项目名称实训九 存储过程的创建和使用一、实训目的和要求一、实训目的和要求1、了解存储过程的作用;2、掌握创建、修改及删除存储过程的方法;3、掌握执行存储过程的方法。二、实训所需仪器、设备二、实训所需仪器、设备硬件:计算机软件:操作系统 Windows XP、SQL Server 2005三、实训内容三、实训内容(一)不带参数的存储过程的创建和修改(一)不带参数的存储过程的创建和修改1、在 student 数据库中创建一个名为 myp1
2、 的存储过程,该存储过程的作用是显示 t_student 中的全部记录。USE STUDENTIF EXISTS (SELECT name FROM sysobjects WHERE name = mpy1 AND type = P)DROP PROCEDURE mpy1GO CREATE PROCEDURE myp1 ASSelect * FROM T_STUDENTGO2、运行 myp1,检查是否实现功能。use studentexec myp123、修改 myp1,使其功能为显示 t_student 中班级为 05541 班的学生记录,然后测试是否实现其功能。set ANSI_NULLS
3、 ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE dbo.myp1 ASSelect * FROM T_STUDENTwhere left(s_number,5)=05541use studentexec myp134、创建一个存储过程 myp2,完成的功能是在表 t_student、表 t_course 和表t_score 中查询以下字段:班级、学号、姓名、性别、课程名称、考试分数。USE STUDENTIF EXISTS (SELECT name FROM sysobjects WHERE name = myp2 AND type = P)DROP
4、PROCEDURE myp2GO CREATE PROCEDURE myp2ASSelect 班级=SUBSTRING(T_STUDENT.S_NUMBER,1,LEN(T_STUDENT.S_NUMBER)-2),学号=SUBSTRING(T_STUDENT.S_NUMBER,LEN(T_STUDENT.S_NUMBER)-1,2),S_NAME AS 姓名,SEX AS 性别,T_COURSE.C_NAME AS 课程名称,t_SCORE.SCORE AS 考试分数 FROM T_STUDENT,T_COURSE,t_SCOREWHERE T_STUDENT.S_NUMBER=t_SCOR
5、E.S_NUMBERAND T_COURSE.C_NUMBER=t_SCORE.C_NUMBERGO4(二)带输入参数的存储过程的创建(二)带输入参数的存储过程的创建1、创建一个带有一个输入参数的存储过程 stu_info,该存储过程根据传入的学生编号,在 t_student 中查询此学生的信息。USE STUDENTIF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_Info AND type = P)DROP PROCEDURE Stu_InfoGO USE STUDENTGOCREATE PROCEDURE Stu_Info S
6、_NUMBER varchar(10)AS Select 班级=SUBSTRING(T_STUDENT.S_NUMBER,1,LEN(T_STUDENT.S_NUMBER)-2),学号=SUBSTRING(T_STUDENT.S_NUMBER,LEN(T_STUDENT.S_NUMBER)-1,2),S_NAME AS 姓名,SEX AS 性别,BIRTHDAY AS 出生日期,POLITY AS 政治面貌 FROM T_STUDENTWHERE S_NUMBER=S_NUMBERGO52、创建一个带有一个输入参数的存储过程 stu_info2,该存储过程根据传入的学生编号,在 t_stude
7、nt 中查询此学生班级、学号、姓名和年龄。USE STUDENTIF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_Info2 AND type = P)DROP PROCEDURE Stu_Info2GO USE STUDENTGOCREATE PROCEDURE Stu_Info2 S_NUMBER varchar(10)AS Select 班级=SUBSTRING(T_STUDENT.S_NUMBER,1,LEN(T_STUDENT.S_NUMBER)-2),学号=SUBSTRING(T_STUDENT.S_NUMBER,LEN
8、(T_STUDENT.S_NUMBER)-1,2),S_NAME AS 姓名,YEAR(GETDATE()-YEAR(BIRTHDAY) AS 年龄 FROM T_STUDENTWHERE S_NUMBER=S_NUMBERGO3、创建一个带有一个输入参数的存储过程 stu_info3,该存储过程根据传入的班级编号,查询该班所有同学的所有科目的成绩和。USE STUDENTIF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_Info3 AND type = P)DROP PROCEDURE Stu_Info3GO CREATE PRO
9、CEDURE Stu_Info3 6class_number varchar(10)AS Select sum(score) as 成绩和 FROM t_scoreWHERE class_number=SUBSTRING(t_score.S_NUMBER,1,LEN(t_score.S_NUMBER)-2)4、创建一个带有两个输入参数的存储过程 stu_info4,该存储过程根据传入的班级编号和课程号,查询该班所有同学的该课程的平均分。USE STUDENTIF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_Info4 AND typ
10、e = P)DROP PROCEDURE Stu_Info4GO CREATE PROCEDURE Stu_Info4class_number varchar(10),c_number varchar(10)AS Select avg(t_score.score) as 平均分 FROM t_scoreWHERE class_number=SUBSTRING(t_score.S_NUMBER,1,LEN(t_score.S_NUMBER)-2)andc_number=c_number5、创建一个带有两个输入参数的存储过程 stu_info5,该存储过程根据传入的学号和课程号,在 t_score
11、 中查询此学号的学生此课程号的成绩。USE STUDENT7IF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_Info5 AND type = P)DROP PROCEDURE Stu_Info5GO CREATE PROCEDURE Stu_Info5s_number varchar(10),c_number varchar(10)AS Select 学号=t_score.s_number,课程编号=t_score.c_number,score AS 成绩 FROM t_scoreWHERE s_number=s_numberan
12、dc_number=c_number(三)带输入和输出参数的存储过程的创建(三)带输入和输出参数的存储过程的创建1、创建一个带有参数的存储过程 stu_age,该存储过程根据传入的学生编号,在 t_student 中算出此学生的年龄,并根据程序执行结果返回不同的值,程序执行成功,返回整数 0,如果执行出错,则返回错误号。USE STUDENTIF EXISTS (SELECT name FROM sysobjects WHERE name = Stu_age AND type = P)DROP PROCEDURE Stu_ageGO CREATE PROCEDURE Stu_Age S_NUM
13、BER varchar(10),Age int OUTPUTAS DECLARE ErrorValue intSET ErrorValue=0SELECT Age=YEAR(GETDATE()-YEAR(BIRTHDAY) FROM T_STUDENT8WHERE S_NUMBER=S_NUMBERIF (ERROR0)SET ErrorValue=ERRORRETURN ErrorValueGO-验证 declare c_name varchar(30),ReturnValue intset c_name=高等数学print 本程序的执行结果: execute ReturnValue=stu
14、_Score c_nameprint 程序的返回值=+ CAST(ReturnValue as char(2)四、实训步骤四、实训步骤(内容说明:1.大致的操作步骤; 2.源代码,要标注题号)答:1、大致的步骤:【打开数据库】-【打开 student】-【可编程性】-【存储过程】-【新建存储过程】-【输入代码】-【验证】2、源代码附在题目的后面了。五、总结与分析五、总结与分析(内容说明:1.对此次实训原理的归纳; 2.对此次实训过程中出现问题的分析及解决办法; 3.此次实训的收获或体会等) 答:1、此次实训原理的归纳:10(1)了解存储过程的作用;(2) 、掌握创建、修改及删除存储过程的方法;
15、 (3) 、掌握执行存储过程的方法。 2、此次实训过程中出现问题的分析及解决办法: (1) 做题的时面对太多的问题,感觉很陌生与不解,总是要经过询问铜须,或 者看看课本之后,才能将问题解决。 (2)遇到的问题是最后几道题比较难,自己都想不通,后经问老师的提示和自己 与同学的讨论才解决了,虽然现在基本解决,但还是有疑问的,自己课后会好 好想想的。 3、此次实训的收获或体会: 掌握创建、修改及删除存储过程的方法和执行存储过程的方法,这些只是熟悉 罢了,还有待自己虚心向学,遇到的问题还需认真的去解读,牢牢地记住。六、思考题六、思考题1、简述存储过程和自定义函数的区别。答:存储过程:1. 功能强大,限制少2. 不能直接引用返回值3. 用 select 语句返回记录集自定义函数:1. 诸多限制,有许多语句不能使用,许多功能不能实现2. 可以直接引用返回值3. 用表变量返回记录集2、简述存储过程的优点。答:存储过程的优点:(1)实现了模块化编程,一个存储过程可以被多个用户共享和重用。(2)存储过程具有对数据库立即访问的功能。(3)使用存储过程可以加快程序的运行速度。(4)使用存储过程可以减少网络流量。(5)使用存