游标

用途:在数据很多的时候,如果在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)+'' AND ID != @ID),
(SELECT CODE from tbl_unit WHERE tbl_unit.CODE = left(@CODE,3)+'' 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毫秒(机器不同,数据不同),所以效率还是可以的。

最新文章

  1. Python Day18
  2. ABP(现代ASP.NET样板开发框架)主题线下交流会(上海)开始报名了!
  3. vim常用操作
  4. was部分更新
  5. codeforces 742D (分组背包)
  6. 浅析css布局模型1
  7. WPF快速入门系列(4)——深入解析WPF绑定
  8. 模拟alert和confirm
  9. WPF程序只运行一个实例
  10. (WPF) MVVM: DataGrid Binding
  11. mysql备份和恢复
  12. android_demo 之生成颜色
  13. 一些Windows API导致的Crash以及使用问题总结
  14. 1 Java学习之 基本数据类型
  15. mongodb3 ubuntu离线安装(非apt-get)及用户管理
  16. Redis学习笔记(2)——Redis的下载安装部署
  17. 计数排序之python
  18. PlugNT CMS v4.6.3 最新功能
  19. html网页练习豆瓣网
  20. 【干货】PHP常见危险函数

热门文章

  1. C++ Builder创建和调用dll中的资源
  2. BZOJ 5102: [POI2018]Prawnicy
  3. uva1025 dp
  4. Python: 使用生成器创建新的迭代模式
  5. Python numpy 安装以及处理报错 is not a supported wheel on this platform
  6. laravel 项目部署注意事项
  7. SQL学习笔记八之ORM框架SQLAlchemy
  8. CUDA、tensorflow与cuDNN的版本匹配问题【转】
  9. ISSCC 2017论文导读 Session 14: A 28nm SoC with a 1.2GHz Prediction Sparse Deep-Neural-Network Engine
  10. jquery获取服务器控件Label的值