自我理解
首先游标包含两部分一个游标的结果集,一个是游标的指针。我们可以将其理解为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;--释放游标
|