【SQL Server】利用游标将学生表中的成绩转化为绩点
时间:2021-07-01 10:21:17
帮助过:51人阅读
table sc
add GPA
float;
--加入绩点列
alter table sc
add number int identity(
1,
1);
--将表按原始位置顺序编号(可加可不加)
alter table sc
add primary key(
number)
declare score_visit
cursor --声明一个游标
for select score
from sc
open score_visit
--打开游标
declare @GPA float
select @GPA=score
from sc
fetch next from score_visit
into @GPA
while @@fetch_status=0 --循环读取
begin
if @GPA>=90
update sc
set GPA
=4.0 where current of score_visit;
if @GPA >=85 and @GPA <90
update sc
set GPA
=3.7 where current of score_visit;
if @GPA >=82 and @GPA <85
update sc
set GPA
=3.3 where current of score_visit;
if @GPA >=78 and @GPA <81
update sc
set GPA
=3.0 where current of score_visit;
if @GPA >=75 and @GPA <78
update sc
set GPA
=2.7 where current of score_visit;
if @GPA >=72 and @GPA <75
update sc
set GPA
=2.3 where current of score_visit;
if @GPA >=68 and @GPA <72
update sc
set GPA
=2.0 where current of score_visit;
if @GPA >=64 and @GPA <68
update sc
set GPA
=1.5 where current of score_visit;
if @GPA >=60 and @GPA <64
update sc
set GPA
=1.0 where current of score_visit;
if @GPA <60
update sc
set GPA
=0 where current of score_visit;
fetch next from score_visit
into @GPA
end
close score_visit
--关闭游标
deallocate score_visit
--删除游标
具体实现代码
一、分析、功能:在已经有学生数据的基础上,利用游标的循环读取功能,将数据表中的成绩依次转化为绩点。
游标:是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标可以被看作是一个查询结果集(可以是零条、一条或由相关的选择 语句检索出的多条记录)和结果集中指向特定记录的游标位置组成的一个临时文件,提供了在查询结果集中向前或向后浏览数据、处理结果集中数据的能力。
在表中加入一个GPA列并合理化声明一个游标后,将原先表中的成绩数据读取到一个新的变量中,利用绩点转换规则,将成绩转化为相应绩点,并生成到GPA列,操作完成后,关闭并删除游标。
二、运行结果:(如图)
三、心得体会:虽然一开始并没有搞清楚游标的操作机制,导致数据的处理出现了一点小问题,但是在利用游标对数据的转化中,对游标的使用也慢慢地显得得心应手,同时又对部分细节进行了更好的深入,如读取数据时对各条数据的处理以及对表结构的细分。从陌生到熟悉正是知识体系建立并掌握的过程。
四、遇到的问题:
1.读取到的数据并不能进行实际操作
2.游标使用后未关闭/删除,导致程序下次运行时出现错误
3.成绩比较过程中的变量处理不恰当
五、解决办法:
1.将读取到的数据暂时放入到新声明的一个变量中
2.将使用后的游标关闭/删除
3.对变量进行规范处理,统一格式
六、改进方案:
1.将 if 所在的条件判断语句块进行简化
2.直接将读取数据进行转化,不必暂时放到新声明的变量内
3.在加入GPA列后对表中数据进行分段化处理,不至于显得杂乱
【SQL Server】利用游标将学生表中的成绩转化为绩点
标签:实践 set 分段 rom -- mamicode 能力 pre event