zoukankan      html  css  js  c++  java
  • SqlServer高级特性--游标

    游标

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

  • 相关阅读:
    总结@ 在C# 中的用法
    如何在多线程中调用winform窗体控件
    jQuery对象和DOM对象原来不一样啊
    以编程方式使用 Word 中的内置对话框
    C#中Application.DoEvents()的作用
    本地设置正常,放服务器上就报 System.Security系统找不到指定的文件解决方法
    复制选中的listbox内容
    将一列数据拼接成一个字符串
    服务器不能复制粘贴问题处理
    获取Token不完整问题
  • 原文地址:https://www.cnblogs.com/chenmc/p/9390051.html
Copyright © 2011-2022 走看看