• 游标小例


    一,游标的 作用:

        当在存储过程,函数,批处理,触发器中 使用 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
        End

    Close @MyVariable

    Deallocate @MyVariable
  • 相关阅读:
    宝贝,对不起
    转帖]四川人逆境中的幽默(整理)
    见闻大量急救车急速行驶有感
    5月16日当代第一IT诗人代腾飞17XIE在线访谈(转)
    陈风莲(帮别人名字作诗)
    愉快且卓有成效:培养你与人相处的能力
    夜半再次遭遇地震
    请允许我像亲人一样去爱你
    DiscoveryService.getRemoteAdvertisements是否会获得本地通告?
    windowClosed事件不响应
  • 原文地址:https://www.cnblogs.com/djh/p/612802.html
Copyright © 2020-2023  润新知