SQL Server 2008 游标使用实例
2014-12-19 11:16
429 查看
本文使用以下两张数据库表作为演示对象。
1 游标初探 -- 使用游标进行遍历
先简单解释一下上面代码到底做了些什么事。
代码一开始定义表类型变量 @classAndStudent ,用来保存学生与班级的信息,随后使用游标来遍历表变量( http://support.microsoft.com/?kbid=305977 )@classAndStuden ,在遍历过程中,将学生年龄小于 20 ,且教师名称为“ wsp ”的学生的班级置为 1 。
接下来,对游标的使用做简单的说明。
1)声明游标:确定游标的属性,制定游标的查询结果集。
2)打开游标:编译sql server定义游标的select语句,并行成结果集。
3)获取数据:通过游标以行的单位从结果集中获取数据。
4)关闭游标:停止处理查询。
5)释放游标:释放分配给游标的所有存储资源。
查看执行结果:
结果为:
2 游标进阶 -- 游标嵌套
简单修改上面的代码,即可以完成游标嵌套操作。
增加以下变量的声明。
修改if(@Age<20 and @Teacher='wsp')条件下的代码。
这里其实就是新增了一个游标@subcursor来遍历表tb_class的class_id而已。没什么好难解释的了,再说例子中也没有给出具体的实际操作,仅给出了游标嵌套的代码架子而已,在实际代码中大家可以灵活变更
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游标使用
- SQL Server游标的使用详细实例步骤
- SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法。
- SQL Server 游标使用实例
- SQL Server 中 自定义函数 和 游标使用实例
- 转:SQL SERVER 2008安装的时候提示“该实例名称已在使用”解决办法。
- SQL SERVER 2008 R2安装的时候提示“该实例名称MSSQLSERVER已在使用
- SQL SERVER 2008 游标使用示范
- sql 游标、sql server 游标使用、实例
- count distinct 组合,UPDATE TOP 组合,Sql server 游标使用
- sql server 2000/2005 游标的使用操作
- sql server 2000/2005 游标的使用操作
- FIX: 错误消息当您使用服务器端游标来运行 SQL Server 2005 中大型复杂查询: " " 错误 8623, 严重性 16, 状态 1: 查询处理器用尽了超出内部资源:::
- sql server 游标使用
- SQL游标使用及实例
- Sql Server 2000 中游标的使用示例
- “禁止在SQL Server中生成用户实例。请使用sp_configure'user instances enabled'生成用户实例”
- SQL : 游标使用实例