Transact-SQL 游标

    技术2022-05-11  81

    Transact-SQL 游标 (从访问量上来看 ,本文是blog里每天最受关注的了,想到我当时搜索相关问题时,有用的资料确实很少,走了很 多弯路,所以重新整理编辑了一下,希望对您学习和理解游标有所帮助) 一, 游标的 作用:    当在存储过程,函数,批处理,触发器中 使用 select 返回多条记录时,游标提供了一个可以对记录进行逐条处理的 方法. 二,游标的使用方法: 1,使用Declare Cursor语句,根据Select语句创建游标.     有两种操作方法,效果是一样的,请注意他们的区别 :           第一种:声明变量,然后设置游标              Declare @MyVariable Cursor                --声明@MyVariable 这个变量              Set @MyVariable =Cursor For                --根据select创建游标的固定用法              SELECT id,name FROM usertable                 第二种:声明变量,声明游标,设置变更为游标                  DECLARE @MyVariable CURSOR      --声明@MyVariable 这个变量                  DECLARE MyCursor CURSOR FOR  --注意这里的MyCursor前没有@符号,声明了一个游标                 SELECT id,name FROM usertable                 SET @MyVariable = MyCursor          --在这里才把游标赋值给变量@MyVariable 2,使用Open语句填充该游标         Open @MyVariable        --使用之前必须先打开它                                                --open语句会执行Declare Cursor语句中指定的Select语句,并填充游标 3,使用Fetch语句更改游标所指向的记录,并将值存储在局部变量中:     Fetch Next From @MyVariable     Into @intID,@chvName         说明: 此语句的语法是 Fetch 操作符 From 游标变量名 Into 变量名             a)操作符可以是: Next(下一条),Prior(前一条),First(第一条),Last(最后一条),         也可以指定绝对位置和相对位置     b)游标变量名就是之前创建并填充的@MyVariable     c)变量名:需要在使用之前声明,本例 用到的@intID,@chvName         在Declare @MyVariable Cursor之前声明Declare @intID int,@chvName varchar(50)     d)游标刚好打开时 Fetch Next语句读取第一条记录 4,对检索出来的信息进行处理   While (@@FETCH_STATUS=0)     Begin        if @chvName='不必完美'           begin               update usetable set name='管理员'  where id=@intID           end           Fetch Next From @MyVariable  --移动到下一条,你可以反复使用这个语句           Into @intID,@chvName     End     说明:@@FETCH_STATUS是一个全局变量,             它返回在当前连接期间执行的最后一条Fetch语句的执行状态.             它经常循环中 用于退出循环的条件.            @@FETCH_STATUS的值和其含义:              0(数字零),提取完全成功;              -1, 最后一条已经读完或读取失败              -2,记录丢失(例如,其他人删除了该记录)     还有一个可能会用到的全局变量@@cursor_rows  游标中的记录数 5,使用Close语句关闭该游标,释放大部分的资源(释放记录集以及锁)        Close @MyVariable        说明:此语句执行对象必须是一个已经打开的游标,否则将报错. 6,使用Deallocate语句清楚该游标.     Deallocate @MyVariable     说明:Close语句执行之后,游标结构仍然存在,你还可以再次打开它,如果彻底不用了.你应该用Dealocate语句删除该结构. 完成后的实例为:            Declare @intID int,@chvName varchar(50)             Declare @MyVariable Cursor                --声明@MyVariable 这个变量             Set @MyVariable =Cursor For                --根据select创建游标的固定用法             SELECT id,name FROM usertable               Open @MyVariable        --使用之前必须先打开它            Fetch Next From @MyVariable            Into @intID,@chvName  While (@@FETCH_STATUS=0)    Begin       if @chvName='不必完美'          begin              update usetable set name='管理员'  where id=@intID          end          Fetch Next From @MyVariable  --移动到下一条,你可以反复使用这个语句          Into @intID,@chvName    EndClose @MyVariableDeallocate @MyVariable 本文部分内容引自:<SQL Server 2000存储过程与XML编程>106-111页 三、 更详细的参考资料获得方法:    1/  在MSSQL的联机帮助中搜索:”Transact-SQL 游标“可以得到详细的参数解释信息。        具体操作方法:在企业管理器的菜单栏点帮助->帮助主题->索引->输入"Transact-SQL 游标"     2/  微软的官方帮助:     MSDN 中文帮助地址为: http://msdn2.microsoft.com/zh-cn/library/ms190028.aspx     3/ 相关图书的购买地址:        http://www.dearbook.com.cn/book/SearchBook.aspx?keyword=%u5B58%u50A8%u8FC7%u7A0B 

    最新回复(0)