博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer高级特性--游标
阅读量:6036 次
发布时间:2019-06-20

本文共 1403 字,大约阅读时间需要 4 分钟。

游标

用途:在数据很多的时候,如果在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               //释放游标

在Mybatis中,直接将其作为一条sql语句使用即可。如果有传入参数和传出的话,就必须使用到存储过程了! 

总体效率来看:查询更新10000条数据,在java代码中遍历更新需要时间为310807毫秒,使用游标遍历之后时间为:68358毫秒(机器不同,数据不同),所以效率还是可以的。

转载于:https://www.cnblogs.com/chenmc/p/9390051.html

你可能感兴趣的文章
Python轻量级数据分析库DaPy
查看>>
beetl 和 shrio 结合
查看>>
相对/绝对路径,cd命令,mkdir/rmdir命令,rm命令
查看>>
tomcat中web.xml各配置项的意义
查看>>
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
查看>>
Ztree异步加载自动展开节点
查看>>
反射操作公共成员变量
查看>>
Android热修复升级探索——代码修复冷启动方案
查看>>
学校宿舍的深夜之思考
查看>>
VB.NET 生成DBF文件
查看>>
编译安装nginx 1.9.15
查看>>
我的友情链接
查看>>
新的开始~~~
查看>>
字符串的扩展
查看>>
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
四 指针与数组 五 函数
查看>>
硬盘空间满了
查看>>
dutacm.club Water Problem(矩阵快速幂)
查看>>