前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Server通过创建临时表遍历更新数据

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

作者头像
追逐时光者
发布2020-09-24 15:09:29
2.2K0
发布2020-09-24 15:09:29
举报
文章被收录于专栏:编程进阶实战编程进阶实战

前言:

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

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

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

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

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

我的目的是把TalkingSkillType表中的Sort值更新成为与Id一样的值!

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

临时表遍历更新SQL语句:

代码语言:javascript
复制
----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

PRINT(@Num)输入日志:

遍历更新成功后结果如下图所示:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言:
  • 为什么不使用游标,而使用创建临时表?
  • 通过创建临时表遍历更新数据:
    • 未更新前的数据如下图所示:
      • 临时表遍历更新SQL语句:
        • PRINT(@Num)输入日志:
          • 遍历更新成功后结果如下图所示:
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档