【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之 ...
随机推荐
- IOC 的理解与解释
IOC 是什么? Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不 ...
- FMDB的简单实用
一.FMDB 的框架引入点击此处去GitHub下载 二.FMDB 的优缺点 优点:使用起来更加面向对象,省去了很多麻烦.冗余的C语言代码:对比苹果自带的Core Data框架,更加轻量级和灵活:提供了 ...
- golang自定义路由控制实现(二)-流式注册接口以及支持RESTFUL
先简单回顾一下在上一篇的文章中,上一篇我主要是结合了数组和Map完成路由映射,数组的大小为8,下标为0的代表Get方法,以此类推,而数组的值则是Map,键为URL,值则是我们编写对应的接口.但 ...
- SSIS 检查点
在SSIS中,检查点实际上是一个记录系统,用于记录控制流中Task组件的执行状态.通过合理地配置Checkpoint,在Package运行出错之后,重新执行Package,可以跳过上一次已经成功执行的 ...
- Servlet到底是单例还是多例你了解吗?
为一个Java Web开发者,你一定了解和学习过Servlet.或许还曾在面试中被问到过Servelt是单例还是多例这个问题. 遇到这个问题,你是否曾深入了解过,还是百度或者Google了一下,得到答 ...
- Git协作流程
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的流程,让大家有效地合作,使得项目井井有条地发展下去."协作流程"在英语里,叫做"workflo ...
- ubuntu16.04开机循环输入密码无法进入桌面的解决办法
前些天碰到一个头疼的问题,启动我的ubuntu之后,输入密码闪屏一下,又需要输入密码!!!于是再输还要再输!!!!! 经过百度一翻后终于找到原因和解决办法. 原来是我之前在profile文件里配置了一 ...
- scala 访问阿里云oss
我们的数据一天就一个T,数据量不断增大,集群磁盘有限,所以把冷数据放到了oss,偶尔会使用到冷数据,如果使用的时候还的从oss上拉数据这样很浪费时间后来想了个办法可以直接获取到oss上的数据.案例:o ...
- 查询订阅某topic的所有consumer group(Java API)
在网上碰到的问题,想了下使用现有的API还是可以实现的. 首先,需要引入Kafka服务器端代码,比如加入Kafka 1.0.0依赖: Maven <dependency> <grou ...
- Java的参数传递是「值传递」还是「引用传递」?
关于Java传参时是引用传递还是值传递,一直是一个讨论比较多的话题. 有人说Java中只有值传递,也有人说值传递和引用传递都是存在的,比较容易让人产生疑问. 关于值传递和引用传递其实需要分情况看待. ...