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

标题: sqlserver 中的游标 [打印本页]

作者: 刘泽宇    时间: 2023-12-3 12:43
标题: sqlserver 中的游标
自我理解
首先游标包含两部分一个游标的结果集,一个是游标的指针。我们可以将其理解为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;--释放游标







欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2