重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 809|回复: 0
打印 上一主题 下一主题

sqlserver 中的游标

[复制链接]
跳转到指定楼层
楼主
发表于 2023-12-3 12:43:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
自我理解
首先游标包含两部分一个游标的结果集,一个是游标的指针。我们可以将其理解为foreach循环的逻辑。其中structs代表的就是游标的结果集,stuct代表的就是指针。
  for(struct struct:structs){

        }

因此我们可以知道,游标就是各个数据库提供给我们对各个结果集(不同的数据库表)进行查看和处理的能力。我们可以对结果集中一次以一行或者多行向下浏览数据。
游标的生命周期
声明游标,打开游标,读取游标数据,关闭游标,释放游标等五部分。

声明游标 :
DECLARE My_Cursor CURSOR --定义游标
FOR ( SELECT device_id, material_id FROM [dbo].[tablename] )

打开游标 :
OPEN My_Cursor;--打开游标

读取游标元素游:
FETCH NEXT  FROM My_Cursor INTO @DeviceID,@MaterialID;--读取第一行数据

关闭游标 :
CLOSE My_Cursor;--关闭游标

释放游标 :
DEALLOCATE My_Cursor;--释放游标

例子
DECLARE @DeviceID bigint,@MaterialID bigint
DECLARE My_Cursor CURSOR --定义游标
FOR ( SELECT device_id, material_id FROM [dbo].[tablename] )
OPEN My_Cursor;--打开游标
FETCH NEXT  FROM My_Cursor INTO @DeviceID,@MaterialID;--读取第一行数据
WHILE
--这里对游标的状态进行判断,如果为0,证明游标中有值
                @@FETCH_STATUS = 0 BEGIN
                        UPDATE tablename
                        SET device_code = ( SELECT code FROM tablename1 WHERE id = @DeviceID ),
                        material_code = ( SELECT code FROM tablename2 WHERE id =@MaterialID )
                WHERE
                        CURRENT OF My_Cursor;--更新
                        --读取下一行数据
                FETCH NEXT
                FROM
                        My_Cursor INTO @DeviceID,@MaterialID;
               
        END CLOSE My_Cursor;--关闭游标
DEALLOCATE My_Cursor;--释放游标


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-11-16 11:13 , Processed in 0.091535 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表