【实验目的】
- 掌握存储过程的创建方法。
- 掌握存储过程的使用方法。
【实验环境】
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 |
本文详细介绍了在Sqlserver2005环境下如何创建和使用存储过程,包括创建无参数、有参数的存储过程,执行、查看、修改和删除存储过程的方法。通过实例展示了如何查询特定系学生信息、按学生姓名获取成绩、获取课程最高分、计算学生平均分以及教师平均分等操作。
1006





