sqlserver中怎样使用游标for循环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver中怎样使用游标for循环相关的知识,希望对你有一定的参考价值。
参考技术A 给你举个例子利用游标循环更新、删除MemberAccount表中的数据
DECLARE My_Cursor CURSOR --定义游标
FOR (SELECT * FROM dbo.MemberAccount) --查出需要的集合放到游标中
OPEN My_Cursor; --打开游标
FETCH NEXT FROM My_Cursor ; --读取第一行数据
WHILE @@FETCH_STATUS = 0
BEGIN
--UPDATE dbo.MemberAccount SET UserName = UserName + 'A' WHERE CURRENT OF My_Cursor; --更新
--DELETE FROM dbo.MemberAccount WHERE CURRENT OF My_Cursor; --删除
FETCH NEXT FROM My_Cursor; --读取下一行数据
END
CLOSE My_Cursor; --关闭游标
DEALLOCATE My_Cursor; --释放游标
GO
sqlserver高级特性
1. 游标
用途:在数据很多的时候,如果在java代码中进行循环之后再进行更新数据,会造成频繁的连接数据库,耗费性能,所以就可以使用到游标
作用:查询出来的集合直接在SQL中进行遍历在进行更新
DECLARE allUnits CURSOR //定义游标,For后面是集合,你为那个集合定义的游标。 FOR (SELECT ID,CODE FROM tbl_unit where tbl_unit.PARENT_UNIT_CODE is null) OPEN allUnits //开启游标 declare @ID int,@CODE nvarchar(50) //定义游标中你要使用到的变量,需要注意的是:这里的变量个数必须和你上面集合中查询出来的个数一致 FETCH NEXT FROM allUnits INTO @ID,@CODE //开启第一行数据,导入参数 WHILE @@FETCH_STATUS = 0 //判断游标的下一条数据是否存在: =0表示成功,= -1表示失败或不在结果集中,= -2 表示提取的行不存在。 BEGIN //开始业务逻辑 PRINT @CODE PRINT @ID UPDATE tbl_unit SET tbl_unit.parent_unit_code = ( ISNULL( (SELECT CODE from tbl_unit WHERE tbl_unit.CODE = left(@CODE,6)+‘000‘ AND ID != @ID), (SELECT CODE from tbl_unit WHERE tbl_unit.CODE = left(@CODE,3)+‘000000‘ AND ID != @ID) ) ) WHERE tbl_unit.ID = @ID FETCH NEXT FROM allUnits INTO @ID,@CODE //导入下一行数据 END //游标结束 CLOSE allUnits //关闭游标 DEALLOCATE allUnits //释放游标
以上是关于sqlserver中怎样使用游标for循环的主要内容,如果未能解决你的问题,请参考以下文章