SQL Server游标语句 声明/打开/循环 sqlserver 循环语句

网上搜到一篇介绍SqlServer数据库游标的用法,感觉言简意赅,粘过来跟大家分享一下:

SQL Server游标语句使用方法:

1 1 --声明一个游标

2 2 DECLARE MyCursor CURSOR

3 3 FOR SELECT TOP 5 FBookName,FBookCoding FROM TBookInfo//定义一个叫MyCursor的游标,存放for select 后的数据

4 4

5 5 --打开一个游标

6 6 OPEN MyCursor//即打开这个数据集

7 7

8 8 --循环一个游标

9 9 DECLARE @BookName nvarchar(2000),@BookCoding nvarchar(2000)

10 10 FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding//移动游标指向到第一条数据,提取第一条数据存放在变量中

11 11 WHILE @@FETCH_STATUS =0//如果上一次操作成功则继续循环

12 12 BEGIN

13 13 print 'name'+@BookName

14 14 FETCH NEXT FROM MyCursor INTO @BookName,@BookCoding//继续提下一行

15 15 END

16 16

17 17 --关闭游标

18 18 CLOSE MyCursor

19 19 --释放资源

20 20 DEALLOCATE MyCursor

eg:

create table #a

(

id varchar(20),

name varchar(20)

)

insert into #a select 1,'jack'

insert into #a select 2,'join'

insert into #a select 3,'make'

declare mycursor cursor

for select * from #a

open mycursor

declare @id varchar(20),@name varchar(20)

fetch next from mycursor into @id,@name

while @@fetch_status=0

begin

select @id,@name

SQL Server游标语句 声明/打开/循环 sqlserver 循环语句
fetch next from mycursor into @id,@name

end

close mycursor

deallocate mycursor



游标属于行级操作 消耗很大 SQL查询是基于数据集的所以一般查询能有 能用数据集 就用数据集 别用游标 数据量大 是性能杀手

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; --班级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 id=@ID end fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;endclose @cursordeallocate @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)打开游标:编译sqlserver定义游标的select语句,并行成结果集。

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

fetch next from @cursor into @ClassId,@ClassName,@Teacher,@Id,@Name,@Age;4)关闭游标:停止处理查询。

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

deallocate @cursor查看执行结果:

select * from @classAndStudentselect * from tb_Student结果为:



2游标进阶--游标嵌套

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

增加以下变量的声明。

declare @subcursor cursor;--子游标declare @subClassID int;修改if(@Age<20and@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 @subcursorEnd这里其实就是新增了一个游标@subcursor来遍历表tb_class的class_id而已。没什么好难解释的了,再说例子中也没有给出具体的实际操作,仅给出了游标嵌套的代码架子而已,在实际代码中大家可以灵活变更。

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/72746.html

更多阅读

如何配置SQL Server 2008管理器 sqlserver2008配置

如何配置SQL Server 2008管理器——简介SQl Server 配置管理器(简称为配置管理器)包含了SQL Server 2008服务、SQL Server 2008网络配置和SQL Native Client配置3个工具,供数据库管理人员做服务器启动停止与监控、服务器端支持的网络协

sql脚本怎样保存、打开脚本文件? bat脚本打开文件

sql脚本怎样保存、打开脚本文件?——简介相信数据库对于软件开发、实施或者测试来说都不陌生,不论是创建数据库表还是查询、添加、删除、修改的一些操作语句,都需要脚本文件。以SqlServer2005为例介绍其操作过程,其他数据基本相同。sql

sql server 2008 r2安装详解 sqlserver2008r2 64位

sql server 2008 r2安装详解——简介本篇文章为大家介绍了安装sql server 2008 安装图解,里面有详细步骤,以及需要注意的事项,希望能帮助有需要的朋友。一、进入安装程序插入SQL Server 2008 R2安装光盘,自动运行后出现“SQL Server

SQL Server SQL触发器经验详解 sqlserver 触发器调试

【SQL Server】SQL触发器经验详解——简介自从上次在经验中使用了触发器,有读者询问我一些关于触发器的相关信息,个人推荐首先你需要先去把触发器最基础的东西了解清楚,然后通过这次的经验,希望能在你理解的基础上,加深你对触发器的了解,

SQL Server如何导入mdf,ldf文件 mdf导入sql server

SQL Server如何导入mdf,ldf文件——简介在平时开发中,经常会遇到数据库SQL Server如导入mdf,ldf文件的问题,下面给你介绍一下怎么做,希望能够帮到你。SQL Server如何导入mdf,ldf文件——工具/原料SQL Servermdf,ldf文件SQL Server如何导

声明:《SQL Server游标语句 声明/打开/循环 sqlserver 循环语句》为网友忽然長大了分享!如侵犯到您的合法权益请联系我们删除