sql server 动态建表(SQL Server如何通过创建临时表遍历更新数据详解)
类别:数据库 浏览量:1468
时间:2021-10-09 00:23:03 sql server 动态建表
SQL Server如何通过创建临时表遍历更新数据详解前言:
前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据。(线上数据库用是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
PRINT(@Num)输入日志:
遍历更新成功后结果如下图所示:
总结
到此这篇关于SQL Server如何通过创建临时表遍历更新数据的文章就介绍到这了,更多相关SQL Server创建临时表遍历更新数据内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- sqlserver2014怎么重新激活(解决Windows 10家庭版安装SQL Server 2014出现.net 3.5失败问题)
- sqlserver如何设置定时备份(SQL Server使用脚本实现自动备份的思路详解)
- sqlserver分区查询语句(SQL Server中的集合运算: UNION, EXCEPT和INTERSECT示例代码详解)
- sql2008提供身份认证模式(SqlServer2000+ 身份证合法校验函数的示例代码)
- sqlserver字符串格式化(SQL server中字符串逗号分隔函数分享)
- sql server怎么导出数据库(sqlserver复制数据库的方法步骤图文)
- sqlservercount函数怎么用(Sql Server中Substring函数的用法实例解析)
- sqlserver日志被删除(sql server日志处理不当造成的隐患详解)
- sqlserver 插入数据的触发器(SQL server 表数据改变触发发送邮件的方法)
- python2.7连接sqlserver数据库(Python使用sqlalchemy模块连接数据库操作示例)
- sqlserver表分区缺点(SQL Server 公用表表达式CTE实现递归的方法)
- sqlserverdatetime时区(解析SQL Server中datetimeset转换datetime类型问题)
- SqlServer 表连接教程(问题解析)(SqlServer 表连接教程问题解析)
- SqlServer GO命令循环使用实例代码(SqlServer GO命令循环使用实例代码)
- sql server查询操作怎么做(sqlserver分页查询处理方法小结)
- sqlserverdate格式比较(sqlserver之datepart和datediff应用查找当天上午和下午的数据)
- 文明6金币太少怎么办 文明6无限刷钱教程(文明6金币太少怎么办)
- 开国中将,王牌军63军首任政委,两个连襟一个上将一个少将传为佳话(王牌军63军首任政委)
- 臭名昭著的731部队最高负责人 石井四郎(臭名昭著的731部队最高负责人)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
热门推荐
- phpstudy如何部署在linux上(phpstudy linux面板CC防护功能使用教程)
- python中test函数用法(Python TestCase中的断言方法介绍)
- 国产云主机哪个好(便宜好用的国内云主机怎么挑选?)
- django请求流程(Django学习笔记之为Model添加Action)
- phpredis消息队列(PHP+redis实现微博的推模型案例分析)
- python图书馆管理系统源码(python实现图书借阅系统)
- ubuntu下mysql安装教程(Ubuntu 20.04 安装和配置MySql5.7的详细教程)
- html5带放大镜的搜索代码(html5借用repeating-linear-gradient实现一把刻度尺ruler)
- 云服务器操作系统怎么选(云服务器选择Linux还是windows操作系统比较好?)
- 云服务器操作系统怎么选(云服务器选择Linux还是windows操作系统比较好?)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9