一: 工作当中遇到更新较多数据时,使用循环(while,或游标)进行增删改时,特别费时

WHILE @i <= @rows
BEGIN
  SELECT @appNo = AppNumber, @roleid = RoleId, @statusi= Status, @empId = EmployeeId FROM #Atable WHERE ID = @i
  IF EXISTS(SELECT 1 FROM Btable WHERE AppNumber = @appNo AND RoleID = @roleid AND EmployeeId = @empId)
       BEGIN
        UPDATE Btable
    SET Status = @statusi, CreatedBy = NULL, ModifiedOn = GETDATE()
    WHERE AppNumber = @appNoi AND RoleId = @roleidi AND EmployeeId = @empId
  END
  ELSE
  BEGIN
    INSERT INTO Btable(EmployeeId, AppNumber, RoleId, Status, CreatedOn, CreatedBy, ModifiedOn, ModifiedBy)
    SELECT EmployeeId, AppNumber, RoleId, Status, GETDATE(), CreatedBy, GETDATE(), ModifiedBy FROM #Atable WHERE ID = @i
  END

  SELECT @i= @i + 1
END

二:利用表左、右连接进行批量删除解决循环增删改耗时长的问题

  update aru set aru.Status = arul.Status, aru.ModifiedOn = GETDATE()
  from Btable as aru
  inner join Atable as arul
  on aru.AppNumber = arul.AppNumber and aru.RoleId = arul.RoleId and aru.EmployeeID = arul.EmployeeID

三:A,B两张表中有可能数据不相等,可以声明两个变量@count1,@count2

  DECLARE @Count1 int,@Count2 int
  select @Count1 = COUNT(1) from Atable
  select @Count2 = COUNT(1) from Btable

四: 根据@count1和@count2的大小判断是否新增还是删除

IF(@Count1 > @Count2)
BEGIN  
  SELECT * INTO Btable
  from Atable as arul
  left join Btable as aru
  on aru.AppNumber = arul.AppNumber and aru.RoleId = arul.RoleId and aru.EmployeeID = arul.EmployeeID
  where aru.AppNumber is null and aru.RoleId is null and aru.EmployeeID is null
END
ELSE
BEGIN
  update aru set aru.Status = 0
  from Btable as aru
  left join Atable as arul
  on aru.AppNumber = arul.AppNumber and aru.RoleId = arul.RoleId and aru.EmployeeID = arul.EmployeeID
  where arul.AppNumber is null and arul.RoleId is null and arul.EmployeeID is null
END

数据量较多时,又比较、又更新、又新增时,利用循环特别费时,批量更新的效率是循环的几十倍甚至上百倍

个人工作中总结出来,如有转载请注明出处!

转载于:https://www.cnblogs.com/chengxiaofei2018/p/10065706.html

【优化SQL Server循环更新、插入耗时长的问题】相关推荐

  1. Sql Server 循环语句插入

    有个表tt 描述为: q (PK,int,not null) w (nchar(10),not null) e (int,not null) r (int,not null) t (int,not n ...

  2. 优化SQL Server数据库查询方法

    本文详细介绍了优化SQL Server数据库查询方法. SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) ...

  3. 五十种巧妙优化SQL Server数据库

    五十种巧妙优化SQL Server数据库的方法:出现性能问题的原因- 没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷). I/O吞吐量小,形成了瓶颈效应. 没有创建计算列导致查询不 ...

  4. 50种方法巧妙优化SQL Server数据库(转载)

    50种方法巧妙优化SQL Server数据库 查询速度慢的原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3. ...

  5. 应用事件探查器优化SQL Server系统[转]

    应用事件探查器优化SQL Server系统 关键词:Mssql,,概述 当你的SQL Server数据库系统运行缓慢的时候,你或许多多少少知道可以使用SQL Server Profiler(中文叫SQ ...

  6. 优化SQL Server的内存占用之执行缓存

    优化SQL Server的内存占用之执行缓存篇 优化SQL Server的内存占用之执行缓存 在论坛上常见有朋友抱怨,说SQL Server太吃内存了.这里笔者根据经验简单介绍一下内存相关的调优知识. ...

  7. sql server 循环_学习SQL:SQL Server循环简介

    sql server 循环 Loops are one of the most basic, still very powerful concepts in programming – the sam ...

  8. 索引sql server_优化SQL Server索引策略

    索引sql server 指数策略概述 (Index strategies overview) This article is about techniques for optimizing the ...

  9. 用Java向SQL Server数据库中插入float数据报错An error occurred while converting the Float value to JDBC data type

    作者:翁松秀 用Java向SQL Server数据库中插入float数据报错 用Java向SQL Server数据库中插入float数据报错 报错信息: 报错原因: 解决方案: 报错信息: An er ...

最新文章

  1. java静态变量和实例变量的区别6_java静态变量的与实例变量的区别
  2. 【批处理学习笔记】第二十四课:直接传递
  3. 关于STL中的map和hash_map
  4. mysql 自动归档,如何将数据库从非归档模式转为自动归档模式:
  5. docker容器构建_我如何容器化构建系统
  6. matlab两张图片合成一张_二次曝光合成手机照片剪影照并不难,这样用snapseed轻松实现...
  7. php正则表达式2,php正则表达式基本语法(2)
  8. css无效 https_【CSS非全解02】CSS基础-文档流
  9. 使用python fabric搭建RHEL 7.2大数据基础环境以及部分优化
  10. 数据挖掘概念与技术(第三版)课后答案——第三章
  11. android模拟器快捷键,Android模拟器快捷键大全
  12. python中除法运算_python除法运算
  13. 关于『HTML』:第三弹
  14. SveletJs学习——运动动画
  15. 在keil中使用bdata型可位寻址全局变量
  16. Cook-Torrance/ Ward反射方程
  17. uni-app的生命周期说明及平台差异性说明
  18. X-Space系列进阶教程七之703N 740N 710N 720N 串口辅助刷机,救砖(转载)
  19. 市面常用芯片对应的ARM架构
  20. 人工智能、物联网时代,嵌入式思维的应用

热门文章

  1. python中pickle模块的用法_Python中json模块和pickle模块的简单介绍(附示例)
  2. django下创建APP
  3. pythonATM自动存取款机7天密码保护
  4. java面试题二 %运算符的问题
  5. java应该学的基础东西
  6. ES6前端就业课第三课之class
  7. 企业参加HVV的防守思路总结
  8. Python3+WebSockets实现WebSocket通信
  9. 关于waf的一些随想
  10. python打包的exe开机自动启动(windows)