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

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

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; --班级ID
declare @ClassName nchar(10); --班级名称
declare @Teacher nchar(10); --教师
declare @Id int; --学生ID
declare @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.classid declare @cursor cursor;--游标
set @cursor=cursor for
select class_id,class_name,teacher,id,name,age from @classAndStudent;
open @cursor
fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;
while @@FETCH_STATUS=0
begin
if(@Age<20 and @Teacher='wsp')
begin
update tb_Student set classid=1 where id=@ID
end
fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;
end
close @cursor
deallocate @cursor

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

代码一开始定义表类型变量@classAndStudent,用来保存学生与班级的信息,随后使用游标来遍历表变量(http://support.microsoft.com/?kbid=305977)@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 @classAndStudent
select * from tb_Student

结果为:

2 游标进阶--游标嵌套

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

增加以下变量的声明。

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 t.class_id=@ClassId
open @subcursor
fetch next from @subcursor into @subClassID
while @@FETCH_STATUS=0
begin
--做你想做的
--是男人,想做就做呗
fetch next from @subcursor into @subClassID
end
close @subcursor
deallocate @subcursor
End

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

SQL Server 2008 游标使用实例的更多相关文章

  1. SQL Server 2008 数据库镜像部署实例之三 配置见证服务器

    SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...

  2. SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移

    SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移 上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据 ...

  3. SQL Server 2008 数据库镜像部署实例之一 数据库准备

    SQL Server 2008 数据库镜像部署实例之一 数据库准备 一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动 ...

  4. 转载 SQL Server 2008 R2 事务与隔离级别实例讲解

    原文:http://blog.itpub.net/13651903/viewspace-1082730/ 一.事务简介 SQL Server的6个隔离级别中有5个是用于隔离事务的,它们因而被称作事务隔 ...

  5. SQL SERVER 2008 R2安装的时候提示“该实例名称MSSQLSERVER已在使用

    SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法._冷雨玫瑰_新浪博客---和这文章描述差不多http://blog.sina.com.cn/s/blog_672b419f0 ...

  6. SQL Server 2008性能故障排查(四)——TempDB

    原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...

  7. SQL Server 2008性能故障排查(二)——CPU

    原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...

  8. SQL Server 2008 R2 性能计数器详细列表(二)

    原文:SQL Server 2008 R2 性能计数器详细列表(二) SQL Server Buffer Partition 对象: 提供计数器来监视 SQL Server 如何使用可用页 SQL S ...

  9. SQL Server 2008 R2 性能计数器详细列表(一)

    原文:SQL Server 2008 R2 性能计数器详细列表(一) SQL Server Backup Device 计数器: 可监视用于备份和还原操作的 Microsoft SQL Server ...

随机推荐

  1. UVA 10765 Doves and bombs

    给定一个无向的连通图,要求每个点去掉后连通分量的数目,然后输出连通分量最多的m个点. 分析: 先求出双连通分量,然后统计所有双连通分量中割顶出现的次数,最后求出的就是割顶去掉后剩下的双连通的数目,对于 ...

  2. [codility]Falling-discs

    http://codility.com/demo/take-sample-test/omega2013 这题有点意思.首先经过思考,想到从底部往上扫,去迎接掉下来的disc.但这样仍然是不行的.后来看 ...

  3. Form.KeyPreview 属性

    Form.KeyPreview 属性 今天再做KeyDown 和 KeyUp 事件时,就是忘了设置,窗体的KeyPreview 属性,所以KeyDown 和 KeyUp 事件没有反应(这里说明一下,本 ...

  4. 【原创翻译】Reducing Branch Delay to Zero in Pipelined Processors

    在流水线处理器中减少分支延迟到零 Antonio M. Gonzalez and Jose M. Llaberia 摘要 一种减少流水处理器中分支延迟到零的机制将在本文被描述以及评估.这种机制基于多重 ...

  5. web项目测试方法总结

    在Web工程过程中,基于Web系统的测试.确认和验收是一项重要而富有挑战性的工作.基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览 ...

  6. [NYOJ 43] 24 Point game

    24 Point game 时间限制:3000 ms  |  内存限制:65535 KB 难度:5   描述 There is a game which is called 24 Point game ...

  7. htmlparser 精确提取的一些代码

    一. ConnectionManager manager = Page.getConnectionManager(); Parser parser = new Parser(manager .open ...

  8. 在SQL2005实现维护计划-备份数据库

    一.備份數據庫維護計劃方案 [注]: 1.先啟動SQL Server Agent服務 2..交易記錄備份 (只限於完整和大量記錄復原模式). 3.下面中”清除備份trn文件” & “清除備份日 ...

  9. 两种应该掌握的排序方法--------1.shell Sort

    先了解下什么都有什么排序算法 https://en.wikipedia.org/wiki/Sorting_algorithm http://zh.wikipedia.org/zh/%E6%8E%92% ...

  10. Kettle汇总时参数

    Kettle汇总时手动执行小时汇总命令: ./kitchen.sh -norep -file /usr/local/evqm/kettle/kettle_scripts/rpt_hour.kjb -p ...