【实验目的】
- 掌握存储过程的创建方法。
- 掌握存储过程的使用方法。
【实验环境】
Sql server 2005
【实验重点及难点】
- 创建无参数的存储过程。
- 创建有参数的存储过程。
- 执行存储过程的方法。
- 查看存储过程的方法。
- 修改存储过程的方法。
- 删除存储过程的方法。
【实验内容】
设定已有一个名为XSCJ的数据库,在XSCJ数据库中创建如下关系表:学生信息表S,课程表C,成绩表SC。
学生基本信息表S:
Sno | Sname | Ssex | Sage | Sdept |
S1 | 李强 | 男 | 19 | 计算机 |
S2 | 王松 | 男 | 20 | 通信工程 |
S3 | 李丽 | 女 | 18 | 电子 |
S4 | 张平 | 女 | 21 | 计算机 |
S5 | 何晴 | 女 | 19 | 通信工程 |
S6 | 王小可 | 男 | 20 | 计算机 |
S7 | 张欢 | 男 | 20 | 电子 |
课程信息表C: 学生成绩表SC:
Sno | Cno | Score |
S1 | C2 | 85 |
S2 | C3 | 72 |
S3 | C4 | 90 |
S4 | C1 | 84 |
S5 | C2 | 58 |
S6 | C3 | 88 |
S3 | C1 | 69 |
S1 | C5 | 88 |
S1 | C3 | 95 |
Cno | Cname | Cteacher |
C1 | C语言 | 刘军 |
C2 | C++程序设计 | 李彤 |
C3 | 操作系统 | 吴明 |
C4 | 数据库 | 李白 |
C5 | 计算机网络 | 苏志朋 |
C6 | 数据结构 | 刘军 |
1、创建一个名为sp_cxxs的存储过程,要求该存储过程列出计算机系所有学生的姓名。
Create procedure dbo.sp_cxxs AS Select sname from s where sdept=’计算机’ go |
2、创建一个名为sp_cxcj的存储过程,要求该存储过程带一个输入参数,用于接收学生姓名。执行该存储过程时,将根据输入的学生姓名列出该生的所修课程名称和分数。
Create procedure dbo.sp_cxcj (@p_studentname varchar(50)) AS Select c.cname,sc.score from s,c,sc where s.sno=sc.sno and sc.cno=c.cno and s.sname=@p_studentname go |
3、创建一个名为sp_cxzgf的存储过程,要求该存储过程带一个输出参数,用于返回”C语言”课程的最高分。
Create procedure dbo.sp_cxzgf (@p_courseMax int output) AS Select @p_courseMax=max(score) from c, sc where c.cno=sc.cno and c.cname=’C语言’ go |
4、创建一个名为sp_cxscore的存储过程,要求该存储过程带一个输入参数和一个输出参数,输入参数用于接收学生姓名,输出参数用于返回该生的各科平均分。
Create procedure dbo.sp_cxscore (@p_sname varchar(50), @p_scoreAvg float output) AS Select @p_scoreAvg=avg(score) from s, sc where s.sno=sc.sno and s.sname=@p_sname go |
5、执行题4所创建的存储过程,并打印输出参数的返回值。输入参数为‘李强’。
Declare @stuScoreAvg float Declare @stuName varchar(50) Set @stuName=’李强’ Exec sp_cxscore @stuName, @stuScoreAvg output Print ‘学生 ’ + @stuName + ‘的平均分为: ’ + @stuScoreAvgs go |
6、使用系统表查看XSCJ数据库中名为sp_cxxs的存储过程的定义信息。
select text from scdb.dbo.syscomments where id in (select id from scdb.dbo.sysobjects where name='myrpoc' and type='P') go |
7、修改题4所创建的存储过程,要求新的存储过程带一个输入参数和一个输出参数,输入参数用于接收教师姓名,输出参数用于返回该教师所教课程的平均分。
Alter procedure dbo.sp_cxscore (@p_tname varchar(50), @p_allAvg float output) AS Select @p_allAvg=avg(score) from c, sc where c.cno=sc.cno and c.cteacher=@p_tname Go |
8、删除题7所给出存储过程。
If exists(sleect name from scdb.dbo.sysobjects where name=’ sp_cxscore’ and type=’P’) Drop procedure sp_cxscore GO |