mssql sqlserver 游标创建的基础例子


摘要:
下文讲述游标创建的例子,如下所示:
实验环境:sql server 2008 R2



1.游标的应用场景

在sql脚本编写中,游标主要应用于存储过程和触发器中,创建游标的步骤如下所示:
1.申明临时变量,用于游标执行中临时存储数据
2.什么一个游标,并定义游标属性 declare cursor
3.打开一个游标,并把select结果集放入游标中
4.使用fetich into语句获取游标中的单个行,并将行中的数据放入”1 中申请的变量中”
5.游标使用完毕后,使用close关闭游标,并释放游标所占用的资源


2.游标的举例应用

    ---创建一个存储过程,依次读取一张数据表中的数据
    create proc pr_test
    as 
      ---定义游标需使用的临时变量
     declare @a int
     declare @b varchar(60)
      
     ---定义只读游标,并将游标赋值
     declare testCursor cursor for 
        select a,b from test 
        order by a asc 
        for read only 
    
     --打开游标
     open  testCursor 
     ---循环游标 
     while 0=0 
     begin
      ---读取游标中的数据
      fetch next   ---读取下一行
          from testCursor
       into @a,@b 
      
       if @@fetch_status <> 0 
        begin 
           break   ---退出while 循环
        end 
         ---输出或操作变量
         print @a 
         print @b 
      end 

     close testCursor              ---关闭游标
     deallocate testCursor       ---释放游标

在以上的语句中游标的名称被放入declare 和cursor关键字之间
for关键字后面为对游标进行赋值,在对游标进行赋值的select 语句中不能存在以下关键字

compute、compute by 、for browse 、into

fetch next 为读取行数据,第一次读取时,获取第一行数据,依次向下获取数据,
@@fetch_status 等于0代表读取成功
@@fetch_status 等于-1代表读取失败或行不在结果集中
@@fetch_status 等于-2代表读取的行不存在
游标操作完毕后,应立即关闭游标,当我们没有使用”deallocate”时,我们可以通过open再次重新读取
游标
如游标不需要使用时,可使用deallocate永久释放游标

---游标另类定义方法
   declare testCursor  cursor      ---定义游标
      set  testCursor =cursor for  ---使用set对游标进行赋值
        select a,b from test 
        order by a asc 
        for read only 
  


游标的作用域

我们可以通过在cursor关键字后使用local global关键字来指定游标的作用域
local的作用域为局部,(缺省情况下为local),对当前过程的范围有效
global作用域为全局,对当前连接都有效