sql server游标

游标(Cursor):设置一个数据表的行指针,然后使用循环等操作数据。

游标包含两个部分:一个是游标结果集、一个是游标位置。

      游标结果集:定义该游标得SELECT语句返回的行的集合。游标位置:指向这个结果集某一行的当前指针。

声明游标: Declare 游标名称 Cursor for select * from 表名

打开游标: Open 游标名称

使用游标:使用Fetch语句从Transaction-SQL服务器游标中检索特定的一行。使用Fetch操作,可以使游标移动到下一个记录,并将游标返回的每个列得数据分别赋值给声明的本地变量。

            Fetch [Next | Prior | First | Last | Absolute n | Relative n ]  From 游标名称   Into @变量1,@变量2

                   Next表示返回结果集中当前行的下一行记录,如果第一次读取则返回第一行。默认的读取选项为Next

                   Prior表示返回结果集中当前行的前一行记录,如果第一次读取则没有行返回,并且把游标置于第一行之前。

                   First表示返回结果集中的第一行,并且将其作为当前行。

                   Last表示返回结果集中的最后一行,并且将其作为当前行。

关闭游标:  Close  游标名称

释放游标: Deallocate  游标名称

具体可参考这篇博文,写的很详细:http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html

实例:

--创建游标来获取当天更新的数据

    DECLARE cur_update cursor for

        select * from his_gxjg0101 where convert(nvarchar(50),UPDATEDTIME,112) = CONVERT(nvarchar(50),getdate(),112)

    declare @begintime date

    declare @endtime date

    declare @gh nvarchar(32)

    declare @classtype nvarchar(50)

    declare @updatedtime datetime

    SET NOCOUNT ON;     --当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。                   


    --往历史拉链表中插入最新数据

    insert into his_gxjg0101

        select updatedtimeconvert(date,'99991231',120),gh,classtype,getdate() from gxjg0101

        where convert(nvarchar(50),UPDATEDTIME,112) = CONVERT(nvarchar(50),getdate(),112)

    --打开游标,更新历史数据的结束时间

    open cur_update

    fetch nextfrom cur_update into@begintime,@endtime,@gh,@classtype,@updatedtime

    while (@@FETCH_STATUS=0)

    begin

    update his_gxjg0101 set endtime =@begintime

         where endtime = '9999-12-31'

         and CONVERT(nvarchar(100),updatedtime,111) != CONVERT(nvarchar(100),getdate(),111)

         and gh = @gh

    fetch nextfrom cur_update into@begintime,@endtime,@gh,@classtype,@updatedtime

    end

    close cur_update


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值