【SQL Server】利用游标将学生表中的成绩转化为绩点
alter 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】利用游标将学生表中的成绩转化为绩点的更多相关文章
- SQL Server 利用游标解决Tempdb究极竞争-DBA-程序员需知
SQL Server tempdb分配竞争算是DBA老生常谈的问题了,几乎现在所有的DBA都知道多建几个文件来解决/缓解问题.但是深层次的的竞争依旧不可避免.这里给大家剖析下游标在tempdb中的特点 ...
- SQL Server 基础之《学生表-教师表-课程表-选课表》
一.数据库表结构及数据 建表 CREATE TABLE Student ( S# INT, Sname ), Sage INT, Ssex ) ) CREATE TABLE Course ( C# I ...
- SQL Server 基础之《学生表-教师表-课程表-选课表》(二)
表结构 --学生表tblStudent(编号StuId.姓名StuName.年龄StuAge.性别StuSex) --课程表tblCourse(课程编号CourseId.课程名称CourseName. ...
- SQL Server 基础之《学生表-教师表-课程表-选课表》(一)
数据库表结构及数据 建表 CREATE TABLE Student ( S# INT, Sname ), Sage INT, Ssex ) ) CREATE TABLE Course ( C# INT ...
- SQL Server 利用触发器对多表视图进行更新
其步骤就是:利用update操作触发器产生的2个虚拟表[inserted]用来存储修改的数据信息和[deleted]表,然后将对应的数据更新到对应数据表中的字段信息中: 1.首先创建3个表: a.信息 ...
- Sql Server利用游标批量清空数据表
先吐槽一下,由于公司要为新客户部署一个全新的系统,然而公司并没有空库,所以只能把正在线上运行的数据库给备份,然后清空相关数据 下面分享一下我在做清空数据库时写的一个批量清空数据表的方法 思路:查询出该 ...
- SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)
SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...
- SQL Server之游标的基础知识
什么是游标: 游标是可以在结果集中上下游动的指针. 游标的作用: --允许定位到结果集中的特定行. --从结果集的当前位置检索一行或多行数据. --支持对结果集中当前位置的行进行修改. 注意:游标虽然 ...
- SQL Server查询性能优化——堆表、碎片与索引(二)
本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结. 第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...
随机推荐
- PAT1116: Come on! Let's C
1116. Come on! Let's C (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue &quo ...
- struts2中的拦截器
一 AOP思想: 面向切面编程的思想 AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP ...
- 免密登录-python
要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前,还有一个重要的事情要处理,那就 ...
- JavaScript 中常见设计模式整理
开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...
- synchronized(this) 与synchronized(class) 之间的区别
一.概念 synchronized 是 Java 中的关键字,是利用锁的机制来实现同步的. 锁机制有如下两种特性: 互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机 ...
- Spring提供的用于访问Rest服务的客户端:RestTemplate实践
什么是RestTemplate? RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效 ...
- 玩转spring MVC(九)---Spring Data JPA
偷个懒 在网上看有写的比较好的,直接贴个链接吧:http://***/forum/blogPost/list/7000.html 版权声明:本文为博主原创文章,未经博主允许不得转载.
- [python]pip总结
基本命令解释 安装 pip 下载 地址 https://pypi.python.org/pypi/pip 下载 tar.gz 打开cmd,把路径切换到解压后的文件夹 python -m python ...
- java 匿名对象,内部类,修饰符,代码块
匿名对象是在建对象时只有创建对象的语句方法而没有把对象的地址赋值给变量,匿名对象只能调用一次方法,想再调用时需要再创建一个新的匿名对象 创建普通对象:Person p =new Person(); 创 ...
- 【莫比乌斯反演】BZOJ2154 Crash的数字表格
Description 求sigma lcm(x,y),x<=n,y<=m.n,m<=1e7. Solution lcm没有什么直接做的好方法,用lcm=x*y/gcd转成gcd来做 ...