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创建临时表遍历更新数据内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- sqlserver怎么显示变量所占字节数(SQL Server中关于基数估计计算预估行数的一些方法探讨)
- sqlserver删除表的第一行数据(sql server删除前1000行数据的方法实例)
- sqlservercount函数怎么用(Sql Server中Substring函数的用法实例解析)
- sqlserver电脑休眠时断开连接(浅谈sqlserver下float的不确定性)
- sqlserver替换脚本(SQL Server中对数据截取替换的方法详解)
- sqlserver数据库技术及应用教程(SQLServer2019 数据库的基本使用之图形化界面操作的实现)
- sqlserver2016标准分区(Sql Server 2016新功能之Row-Level Security值得关注)
- sqlserver基本知识(sql server学习基础之内存初探)
- sqlserver降序排列(SQL SERVER临时表排序问题的解决方法)
- sqlserver索引实例(SQL Server索引的原理深入解析)
- SQLSERVER 拼接含有变量字符串案例详解(SQLSERVER 拼接含有变量字符串案例详解)
- sql server新建用户无法登录(sqlserver 因为选定的用户拥有对象,所以无法除去该用户的解决方法)
- sqlserver乐观锁与悲观锁(sql server中死锁排查的全过程分享)
- SqlServer中如何解决session阻塞问题(SqlServer中如何解决session阻塞问题)
- sql server修改sa密码(sqlserver添加sa用户和密码的实现)
- docker启动sqlserver(用docker运行postgreSQL的方法步骤)
- 散文 八月再见,九月,我在风中等你(散文八月再见九月)
- 8月再见 9月你好(8月再见)
- 魔兽世界 设计师爆料,原始版本并无PVP,跨阵营属于返璞归真(魔兽世界设计师爆料)
- 吐槽完《弧光大作战》之后,我们和设计师聊了聊魔兽首款手游的立项初衷和未来(吐槽完弧光大作战之后)
- 魔兽争霸3自定义战役少年杰雷 2(魔兽争霸3自定义战役少年杰雷)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
热门推荐
- 存储过程中如何使用事务
- dedecms悬浮导航(DEDECMS开启绝对地址PC端跳转到静态手机端实现方法)
- webview获取html(webView加载html图片遇到的问题解决)
- dedecms中修改图片(让dedecms织梦后台支持上传bmp格式的图片的教程)
- python单例编程(浅谈Python反射 & 单例模式)
- docker安装与使用教程(5分钟安装docker详细步骤)
- linux如何进入makefile(linux中无make命令的问题make: *** 没有指明目标并且找不到 makefile及make命令安装方)
- sqlserver非唯一索引汇总性能(详解SQL Server的聚焦过滤索引)
- js验证身份证号
- JS文件智能提示另一个JS文件中的成员
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9