博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 2008 游标使用实例
阅读量:5234 次
发布时间:2019-06-14

本文共 2363 字,大约阅读时间需要 7 分钟。

本文使用以下两张数据库表作为演示对象。

 

游标初探--使用游标进行遍历

declare @classAndStudent table(  class_id int,                  --班级ID  class_name nchar(10),          --班级名称  teacher nchar(10),             --教师  id int,                        --学生ID  name nchar(10),                --学生名称  age int                        --学生年龄);declare @ClassId int;                --班级IDdeclare @ClassName nchar(10);        --班级名称declare @Teacher nchar(10);          --教师declare @Id int;                     --学生IDdeclare @Name nchar(10);             --学生名称declare @Age int;                    --学生年龄insert into @classAndStudent   select t1.classid,t1.classname,t1.teacher,t2.id,t2.name,t2.age from tb_Class t1,tb_Student t2 where t1.classid =t2.classiddeclare @cursor cursor;--游标set @cursor=cursor for select class_id,class_name,teacher,id,name,age from @classAndStudent;	open @cursorfetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;while @@FETCH_STATUS=0begin  if(@Age<20 and @Teacher='wsp')  begin     update tb_Student set classid=1 where   end  fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;endclose @cursordeallocate @cursor

先简单解释一下上面代码到底做了些什么事。

代码一开始定义表类型变量@classAndStudent,用来保存学生与班级的信息,随后使用游标来遍历表变量()@classAndStuden,在遍历过程中,将学生年龄小于20,且教师名称为“wsp”的学生的班级置为1

接下来,对游标的使用做简单的说明。

1)声明游标:确定游标的属性,制定游标的查询结果集。

declare @cursor cursor;--游标set @cursor=cursor for select class_id,class_name,teacher,id,name,age from @classAndStudent;

2)打开游标:编译sql server定义游标的select语句,并行成结果集。

open @cursor

3)获取数据:通过游标以行的单位从结果集中获取数据。

fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;

4)关闭游标:停止处理查询。

close @cursor

5)释放游标:释放分配给游标的所有存储资源。

deallocate @cursor

查看执行结果:

select * from @classAndStudentselect * from tb_Student

结果为:

 

游标进阶--游标嵌套

简单修改上面的代码,即可以完成游标嵌套操作。

增加以下变量的声明。

declare @subcursor cursor;--子游标declare @subClassID int;

修改if(@Age<20 and @Teacher='wsp')条件下的代码。

if(@Age<20 and @Teacher='wsp')begin	   set @subcursor=cursor for select t.class_id from tb_class t where    open @subcursor   fetch next from @subcursor into @subClassID   while @@FETCH_STATUS=0   begin     --做你想做的     --是男人,想做就做呗   fetch next from @subcursor into @subClassID   end   close @subcursor   deallocate @subcursorEnd

这里其实就是新增了一个游标@subcursor来遍历表tb_class的class_id而已。没什么好难解释的了,再说例子中也没有给出具体的实际操作,仅给出了游标嵌套的代码架子而已,在实际代码中大家可以灵活变更。

转载于:https://www.cnblogs.com/suncoolcat/p/3366217.html

你可能感兴趣的文章
两个UIView添加同一个手势只有最后一个有用
查看>>
THINKPHP的U方法带入JS变量的解决方案
查看>>
Flip Game
查看>>
CentOS7操作系统初始化
查看>>
hadoop 及hbase zookeeper 经常出现问题
查看>>
【原】PNG的使用技巧
查看>>
android studio 使用SVN 锁定文件,防止别人修改(基于Android studio 1.4 )
查看>>
4412 uboot启动分析
查看>>
熟用TableView
查看>>
IO模型《六》IO模型比较分析
查看>>
Android 博客园客户端 (七)登录功能
查看>>
PHP动态页面 生产静态页 方法二
查看>>
NSOperation 代码,阐述NSOperation一般功能和重要功能
查看>>
androidstudio 2.3.3 jni过程汇总(2):2、使用so文件
查看>>
第二篇:使用Spark对MovieLens的特征进行提取
查看>>
WPF 依赖项属性[DependencyProperty]Text的绑定方式
查看>>
在Visual Studio中使用VueJS时,不可以用 v-bind 的简写 : 及 v-on的简写 @
查看>>
并查集--学习详解
查看>>
[App Store Connect帮助]八、维护您的 App(6)使某个先前版本不可下载
查看>>
[Swift]LeetCode419. 甲板上的战舰 | Battleships in a Board
查看>>