存储过程与游标练习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建三个表:学生(学号,姓名)、课程(课程号,课程名)、成绩(学号、课程号、分数),然后在三个表中分别添加记录。按照输入的课程名称打印此门课程的成绩报表(如不给定课程名称则打印SQL课程的成绩),输出结果按照分数降序排列:
例如:
《SQL》成绩表
****************************************************
名次学号姓名成绩
1 0508044126 李军95
2 0508044124 李明85
3 0508044125 王刚75
****************************************************
*/
use pubs
IF EXISTS (SELECT NAME FROM sysobjects
WHERE NAME = '学生')
DROP table 学生
GO
IF EXISTS (SELECT NAME FROM sysobjects
WHERE NAME = '课程')
DROP table 课程
GO
IF EXISTS (SELECT NAME FROM sysobjects
WHERE NAME = '成绩')
DROP table 成绩
GO
create table 学生(学号char(10) primary key
constraint xh_chk check (学号like '0508044[1-4][0-3][0-9]'),姓名nvarchar(10) not null) create table 课程(课程号char(6) primary key,课程名称nvarchar(40))
create table 成绩(学号char(10) not null,课程号char(6) not null,分数numeric(4,1))
insert 学生values('0508044124','李明')
insert 学生values('0508044125','王刚')
insert 学生values('0508044126','李军')
insert 课程values('080101','SQL')
insert 课程values('080204','D S')
insert 成绩values('0508044124','080101',85)
insert 成绩values('0508044124','080204',95)
insert 成绩values('0508044125','080101',75)
insert 成绩values('0508044125','080204',86)
insert 成绩values('0508044126','080101',95)
go
if exists(select * from sysobjects where name='cj_proc' and xtype='p')
drop proc cj_proc
GO
create proc cj_proc @KCM nvarchar(40)=’SQL’
as
SET NOCOUNT ON
DECLARE @XH char(10),@XM nvarchar(10),@kch nvarchar(6),
@CJ numeric(4,1),@message nvarchar(80),@mc int
if not exists(select 课程.课程号from 课程inner join 成绩on 课程.课程号=成绩.课程号and 课程.课程名称=@kcm)
print '无此课程成绩'
else
begin
select @kch=课程.课程号from 课程where 课程.课程名称=@kcm
print ' 《'+@kcm+'》成绩表'
print REPLICATE('*',48)
print '名次学号姓名成绩'
declare xhcj_cursor cursor scroll
for select 学生.学号,姓名,分数from 学生,成绩
where 成绩.学号=学生.学号and 课程号=@kch
order by 分数desc
open xhcj_cursor
fetch next from xhcj_cursor into @xh,@xm,@cj
set @mc=1
while @@fetch_status=0
begin
set
@message=ltrim(str(@mc))+space(10)+@xh+space(7)+@xm+space(12)+ltrim(str(@CJ)) PRINT @message
fetch next from xhcj_cursor into @xh,@xm,@CJ
set @mc=@mc+1
end
print REPLICATE('*',48)
CLOSE xhcj_cursor
DEALLOCATE xhcj_cursor
end
go