前言:

  前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据。(线上数据库用是SQL Server2012)关于数据统计汇总的问题肯定会用到遍历统计汇总,那么问题来了数据库中如何遍历呢?好像并没有for和foreach这种类型的功能呀,不过关于数据库遍历最常见的方法当然是大家经常会想到的游标啦,但是这次我并没有使用游标,而是通过创建临时表的方式来更新遍历数据的。

为什么不使用游标,而使用创建临时表?

  首先使用游标的方式遍历数据可能代码上比较直观,但是代码比较繁琐(声明游标,打开游标,使用游标,关闭游标和释放游标)并且不符合操作集合的原则,而且也非常的耗费性能,因此通常数据量比较大的情况下不推荐使用游标。通过临时表while遍历数据,更符合我们日常的编程思想操作集合原则,性能上虽不敢保证表使用游标要好多少,但是在把临时表使用恰当的前提是能减少大量的性能消耗,并且使用起来非常简单易懂。

通过创建临时表遍历更新数据:

注意:这里只是一个简单的临时表更新实例。

我的目的是把TalkingSkillType表中的Sort值更新对应Id的值!

未更新前的数据如下图所示:

临时表遍历更新SQL语句:

----SQL SERVER通过临时表遍历数据
-- 判断是否存在(object(‘objectname’,‘type’))
IF OBJECT_ID('tempdb.dbo.#temp','U') IS NOT NULL DROP TABLE dbo.#temp; GO
-- 声明变量
DECLARE
@ID AS INT,
@Name AS VARCHAR(50),
@Num AS INT --数据插入临时表(select * INTO #Temp from 来源表)
SELECT ID,Name INTO #temp FROM TalkingSkillType --查询临时表中数据
--SELECT * FROM #temp set @Num=0 --赋初始值 --查询是否存在记录,只要存在会一直循环直到不存在(WHILE EXISTS)
WHILE EXISTS(SELECT ID FROM #temp)
BEGIN set @Num= @Num + 1 -- 取值(把临时表中的值赋值给定义的变量)
SELECT top 1 @ID= ID,@Name=Name FROM #temp; -- 输出操作
PRINT(@Num) --更新
UPDATE TalkingSkillType SET Sort=@ID where id=@ID -- 删除本次操临时表中的数据(避免无限循环)
DELETE FROM #temp WHERE ID=@ID;
END --删除临时表 #temp
--drop table #temp

遍历更新成功后:

 

最新文章

  1. 嵌入式Linux驱动学习之路(十一)按键驱动-中断机制
  2. 解决IE8 内置JSON.stringify,中文变unicode的问题
  3. Android精美的日历控件
  4. effective c++(05)(06)之c++默默编写并调用的函数
  5. HTTP 无法注册 URL http://+:80/Temporary_Listen_Addresses/92819ef8-81ea-4bd9-
  6. db file scattered read
  7. linux下mysql忘记root密码的解决方案
  8. JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象
  9. 使用x manager 连接Linux桌面
  10. RMAN-06217: not connected to auxiliary database with a net service name
  11. deepin系统下部署Python3.5的开发及运行环境
  12. java的lamda表达式
  13. Android-SpinKit 进度条 (ProgressBar)
  14. 记录tiny6410 jlink 命令行调试linux-2.6.38内核
  15. Spring @Resource,@Autowired,@Qualifier的注解注入和区别
  16. Vulcan 基于Meteor的APollO框架 , grapesjs 用于可视化生成Html 页面
  17. jmeter --响应断言详解
  18. Gradle 实战(1)—— 配置环境变量
  19. How to check Logstash's pulse
  20. 《Linux内核设计与实现》 第一、二章学习笔记

热门文章

  1. 下拉菜单,下拉导航,JavaScript,html,jQuery的实现代码
  2. 源码浅入浅出 Java ConcurrentHashMap
  3. Illegal instruction报错 c/c++
  4. 利用Decorator和SourceMap优化JavaScript错误堆栈
  5. xml selectnodes
  6. h5整体页面布局
  7. Fitness - 05.23
  8. Salesforce LWC学习(二十三) Lightning Message Service 浅谈
  9. php中无参函数的RCE
  10. Java里一个线程两次调用start()方法会出现什么情况