游标

用途:在数据很多的时候,如果在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毫秒(机器不同,数据不同),所以效率还是可以的。

SqlServer高级特性--游标的更多相关文章

  1. SqlServer高级特性--存储过程

    需求: 用户需要提交加密数据,提交之后需要解密还原,还原有两种结果:成功和失败! 100个用户,之前7天,判断是否有提交数据,如果有提交有数据,判断是否解密成功(分别存在两个表中).如果没有提交,显示 ...

  2. SQLServer索引的四个高级特性

    一Index Building Filter索引创建时过滤 二Index Include Column索引包含列 三聚集索引Cluster Index 四VIEW INDEX视图索引   SQLSer ...

  3. mysql笔记04 MySQL高级特性

    MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...

  4. Redis基础用法、高级特性与性能调优以及缓存穿透等分析

     一.Redis介绍 Redis是一个开源的,基于内存的结构化数据存储媒介,可以作为数据库.缓存服务或消息服务使用.Redis支持多种数据结构,包括字符串.哈希表.链表.集合.有序集合.位图.Hype ...

  5. Redis基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  6. Redis 基础、高级特性与性能调优

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  7. JDBC高级特性(一)结果集,批量更新

    一.ResultSet的高级特性 1 可滚动ResultSet 1)向前和向后滚动 滚动特性 在JDBC初期版本号中, ResultSet仅能向前滚动 在JDBC兴许版本号中, ResultSet默认 ...

  8. Redis 宝典 | 基础、高级特性与性能调优

    转载:Redis 宝典 | 基础.高级特性与性能调优 本文由 DevOpsDays 本文由简书作者kelgon供稿,高效运维社区致力于陪伴您的职业生涯,与您一起愉快的成长.     作者:kelgon ...

  9. 分布式-信息方式-ActiveMQ的Message dispatch高级特性之(指针) Message cursors

    Message dispatch高级特性之 Message cursors概述            ActiveMQ发送持久消息的典型处现方式是:当消息的消费者准备就绪时,消息发送系统把存储的 消息 ...

随机推荐

  1. Redis在Linux下的安装与配置

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是 NoSQL技术阵营中的一员. 说到NoSQL, ...

  2. Linux 查看系统所有用户

    grep bash /etc/passwd Linux 查看系统所有用户

  3. AVAudioFoundation(5):音视频导出

    本文转自:AVAudioFoundation(5):音视频导出 | www.samirchen.com 本文主要内容来自 AVFoundation Programming Guide. 要读写音视频数 ...

  4. Win32程序支持命令行参数的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 首先说说Win 32 API程序如何支持命令行参数.Win 32程序的入口函数为: int APIENTRY _tWi ...

  5. 解决数据库里表字段带下划线,实体类转小驼峰,Mapper的映射问题

    mybatis中mapUnderscoreToCamelCase的使用 mybatis-config.xml配置: <?xml version="1.0" encoding= ...

  6. 利用ES6中的Array.find/ Array.findIndex来判断数组中已存在某个对象

    前端开发过程中,我们会经常遇到这样的情景:比如选中某个指标obj,将其加入到数组checkedArr中({id: 1234, name: 'zzz', ...}),但是在将其选中之前要校验该指标是否已 ...

  7. [转] sql server 跨数据库调用存储过程

    A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( ) =null , ) =null ) AS BEGIN select N'A' AS a , N'B' ...

  8. Notepad++ 管理工程--转载

    http://blog.csdn.net/cashey1991/article/details/7001385 @1.首先从下面这个菜单打开工程panel @2.在工程panel的“Workspace ...

  9. 雷林鹏分享:JSP 开发环境搭建

    JSP 开发环境搭建 JSP开发环境是您用来开发.测试和运行JSP程序的地方. 本节将会带您搭建JSP开发环境,具体包括以下几个步骤. 配置Java开发工具(JDK) 这一步涉及Java SDK的下载 ...

  10. C++常考面试题

    1 new/delete 与 malloc/free的区别 运算符是语言自身的特性,有固定的语义,编译器知道意味着什么,由编译器解释语义,生成相应的代码. 库函数是依赖于库的,一定程度上独立于语言的. ...