SQL Server要怎么通过创建临时表遍历更新数据?

今天这里主要介绍关于SQL Server要怎么通过创建临时表遍历更新数据?,通过一些理论跟实际例子帮大家解决这个问题,对于正在学习数据库相关的朋友应该会有一些帮助,觉得有所帮助记得帮忙点个赞哦~

前言:

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

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

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

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

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

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

临时表遍历更新SQL语句:

----SQL SERVER通过临时表遍历数据

– 判断是否存在(object(‘objectname’,‘type’))

IF OBJECT_ID('tempdb.dbo.#temp www.wgrky.com ',‘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

转自脚本之家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值