SQL Server 2008 游标使用实例
本文使用以下两张数据库表作为演示对象。
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 游标使用实例的更多相关文章
- SQL Server 2008 数据库镜像部署实例之三 配置见证服务器
SQL Server 2008 数据库镜像部署实例之三 配置见证服务器 前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若 ...
- SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移
SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移 上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据 ...
- SQL Server 2008 数据库镜像部署实例之一 数据库准备
SQL Server 2008 数据库镜像部署实例之一 数据库准备 一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动 ...
- 转载 SQL Server 2008 R2 事务与隔离级别实例讲解
原文:http://blog.itpub.net/13651903/viewspace-1082730/ 一.事务简介 SQL Server的6个隔离级别中有5个是用于隔离事务的,它们因而被称作事务隔 ...
- SQL SERVER 2008 R2安装的时候提示“该实例名称MSSQLSERVER已在使用
SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法._冷雨玫瑰_新浪博客---和这文章描述差不多http://blog.sina.com.cn/s/blog_672b419f0 ...
- SQL Server 2008性能故障排查(四)——TempDB
原文:SQL Server 2008性能故障排查(四)--TempDB 接着上一章:I/O TempDB: TempDB是一个全局数据库,存储内部和用户对象还有零食表.对象.在SQLServer操作过 ...
- SQL Server 2008性能故障排查(二)——CPU
原文:SQL Server 2008性能故障排查(二)--CPU 承接上一篇:SQL Server 2008性能故障排查(一)--概论 说明一下,CSDN的博客编辑非常不人性化,我在word里面都排好 ...
- SQL Server 2008 R2 性能计数器详细列表(二)
原文:SQL Server 2008 R2 性能计数器详细列表(二) SQL Server Buffer Partition 对象: 提供计数器来监视 SQL Server 如何使用可用页 SQL S ...
- SQL Server 2008 R2 性能计数器详细列表(一)
原文:SQL Server 2008 R2 性能计数器详细列表(一) SQL Server Backup Device 计数器: 可监视用于备份和还原操作的 Microsoft SQL Server ...
随机推荐
- android 小米手机连接到电脑adb无法识别 解决方案
下载并安装小米手机助手 它会自动帮你安装驱动程序 安装成功后重启一下adb服务 应该就可以了
- 使用Eclipse调试Android Native Application---cocos2d-x + Eclipse + Android + ndk
纠结很多天的ndk 调试, 终于在 mac 下面顺利完成(注意在windows还是没弄成功,蛋疼...) 调试方法: 1:先google, ndk demo . 把ndk 最基本的hellword ...
- java复制文件的4种方式
尽管Java提供了一个可以处理文件的IO操作类.但是没有一个复制文件的方法.复制文件是一个重要的操作,当你的程序必须处理很多文件相关的时候.然而有几种方法可以进行Java文件复制操作,下面列举出4中最 ...
- python属性查找
python中执行obj.attr时,将调用特殊方法obj.__getattribute__('attr'),该方法执行搜索来查找该属性,通常涉及检查特性.查找实例字典.查找类字典以及搜索基类.如果搜 ...
- windows 下 使用codeblocks 实现C语言对python的扩展
本人比较懒就粘一下别人的配置方案了 从这开始到代码 摘自http://blog.csdn.net/yueguanghaidao/article/details/11538433 一直对Python扩展 ...
- LA_3026_Period_(kmp)
描述 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞
漏洞名称: Linux kernel ‘xfs_attrlist_by_handle()’函数缓冲区溢出漏洞 CNNVD编号: CNNVD-201311-392 发布时间: 2013-11-29 更新 ...
- NOI2010航空管制
2008: [Noi2010]航空管制 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 31 Solved: 0[Submit][Status] De ...
- UITableView添加静态背景.
1: controller self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@" ...
- servlet读取cookie问题
String sessionid = request.getSession().getId(); // 取得当前的session id ckSessionid = new Cookie("s ...