存储过程与游标练习

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档