Transact-SQL 游标
Transact-SQL 游标一,游标的 作用:
Transact-SQL 游标
Transact-SQL 游标    当在存储过程,函数,批处理,触发器中 使用 
select 返回多条记录时,游标提供了一个可以对记录进行逐条处理的 方法.
Transact-SQL 游标
Transact-SQL 游标二,游标的使用方法:
Transact-SQL 游标
Transact-SQL 游标
1,使用Declare Cursor语句,根据Select语句创建游标.
Transact-SQL 游标
Transact-SQL 游标    有两种操作方法,效果是一样的,请注意他们的区别 :
Transact-SQL 游标          第一种:声明变量,然后设置游标
Transact-SQL 游标             
Declare @MyVariable Cursor                --声明@MyVariable 这个变量
Transact-SQL 游标

Transact-SQL 游标             
Set @MyVariable =Cursor For                --根据select创建游标的固定用法
Transact-SQL 游标
             SELECT id,name FROM usertable      
Transact-SQL 游标
Transact-SQL 游标           第二种:声明变量,声明游标,设置变更为游标
Transact-SQL 游标                 
DECLARE @MyVariable CURSOR      --声明@MyVariable 这个变量
Transact-SQL 游标

Transact-SQL 游标                 
DECLARE MyCursor CURSOR FOR  --注意这里的MyCursor前没有@符号,声明了一个游标
Transact-SQL 游标
                SELECT id,name FROM usertable
Transact-SQL 游标
Transact-SQL 游标                
SET @MyVariable = MyCursor          --在这里才把游标赋值给变量@MyVariable
Transact-SQL 游标

Transact-SQL 游标
2,使用Open语句填充该游标
Transact-SQL 游标
Transact-SQL 游标        
Open @MyVariable        --使用之前必须先打开它
Transact-SQL 游标
                                               --open语句会执行Declare Cursor语句中指定的Select语句,并填充游标
Transact-SQL 游标

Transact-SQL 游标
3,使用Fetch语句更改游标所指向的记录,并将值存储在局部变量中:
Transact-SQL 游标
Transact-SQL 游标    
Fetch Next From @MyVariable
Transact-SQL 游标    
Into @intID,@chvName
Transact-SQL 游标    
Transact-SQL 游标    说明: 此语句的语法是 
Fetch 操作符 From 游标变量名 Into 变量名
Transact-SQL 游标       
Transact-SQL 游标     a)操作符可以是: 
Next(下一条),Prior(前一条),First(第一条),Last(最后一条),
Transact-SQL 游标        也可以指定绝对位置和相对位置
Transact-SQL 游标    b)游标变量名就是之前创建并填充的
@MyVariable
Transact-SQL 游标    c)变量名:需要在使用之前声明,本例 用到的
@intID,@chvName
Transact-SQL 游标        在Declare 
@MyVariable Cursor之前声明Declare @intID int,@chvName varchar(50)
Transact-SQL 游标    d)游标刚好打开时 
Fetch Next语句读取第一条记录
Transact-SQL 游标
Transact-SQL 游标
4,对检索出来的信息进行处理
Transact-SQL 游标
Transact-SQL 游标  
While (@@FETCH_STATUS=0)
Transact-SQL 游标    
Begin
Transact-SQL 游标       
if @chvName='不必完美'
Transact-SQL 游标          
begin
Transact-SQL 游标              
update usetable set name='管理员'  where id=@intID
Transact-SQL 游标          
end
Transact-SQL 游标          
Fetch Next From @MyVariable  --移动到下一条,你可以反复使用这个语句
Transact-SQL 游标
          Into @intID,@chvName
Transact-SQL 游标    
End
Transact-SQL 游标
Transact-SQL 游标    说明:
@@FETCH_STATUS是一个全局变量,
Transact-SQL 游标            它返回在当前连接期间执行的最后一条Fetch语句的执行状态.
Transact-SQL 游标            它经常循环中 用于退出循环的条件.
Transact-SQL 游标
Transact-SQL 游标           
@@FETCH_STATUS的值和其含义
Transact-SQL 游标             
0(数字零),提取完全成功;
Transact-SQL 游标             
-1, 最后一条已经读完或读取失败
Transact-SQL 游标             
-2,记录丢失(例如,其他人删除了该记录)
Transact-SQL 游标
Transact-SQL 游标    还有一个可能会用到的全局变量
@@cursor_rows  游标中的记录数
Transact-SQL 游标
Transact-SQL 游标
5,使用Close语句关闭该游标,释放大部分的资源(释放记录集以及锁)
Transact-SQL 游标
Transact-SQL 游标       
Close @MyVariable
Transact-SQL 游标
Transact-SQL 游标       说明:此语句执行对象必须是一个已经打开的游标,否则将报错.
Transact-SQL 游标
Transact-SQL 游标
6,使用Deallocate语句清楚该游标.
Transact-SQL 游标
Transact-SQL 游标    
Deallocate @MyVariable
Transact-SQL 游标
Transact-SQL 游标    说明:Close语句执行之后,游标结构仍然存在,你还可以再次打开它,如果彻底不用了.你应该用Dealocate语句删除该结构.
Transact-SQL 游标
Transact-SQL 游标完成后的实例为:
Transact-SQL 游标
Transact-SQL 游标            
Declare @intID int,@chvName varchar(50)
Transact-SQL 游标
Transact-SQL 游标             
Declare @MyVariable Cursor                --声明@MyVariable 这个变量
Transact-SQL 游标

Transact-SQL 游标             
Set @MyVariable =Cursor For                --根据select创建游标的固定用法
Transact-SQL 游标
             SELECT id,name FROM usertable   
Transact-SQL 游标
Transact-SQL 游标            
Open @MyVariable        --使用之前必须先打开它
Transact-SQL 游标

Transact-SQL 游标            
Fetch Next From @MyVariable
Transact-SQL 游标            
Into @intID,@chvName
Transact-SQL 游标
Transact-SQL 游标  
While (@@FETCH_STATUS=0)
Transact-SQL 游标    
Begin
Transact-SQL 游标       
if @chvName='不必完美'
Transact-SQL 游标          
begin
Transact-SQL 游标              
update usetable set name='管理员'  where id=@intID
Transact-SQL 游标          
end
Transact-SQL 游标          
Fetch Next From @MyVariable  --移动到下一条,你可以反复使用这个语句
Transact-SQL 游标
          Into @intID,@chvName
Transact-SQL 游标    
End
Transact-SQL 游标
Transact-SQL 游标
Close @MyVariable
Transact-SQL 游标
Transact-SQL 游标
Deallocate @MyVariable 
Transact-SQL 游标
Transact-SQL 游标本文部分内容引自:
<SQL Server 2000存储过程与XML编程>106-111页
Transact-SQL 游标

相关文章:

  • 2021-07-10
  • 2021-09-01
  • 2021-11-15
  • 2021-10-29
  • 2021-12-09
  • 2021-07-05
  • 2021-06-17
  • 2021-11-07
猜你喜欢
  • 2021-09-22
  • 2021-07-20
  • 2021-11-08
  • 2022-12-23
  • 2021-12-19
  • 2021-05-26
相关资源
相似解决方案