SQL Server如何通过创建临时表遍历更新数据详解_MsSql

来源:脚本之家  责任编辑:小易  

declare @2113fint intset @5261fint=1declare @fsum intset @fsum=4while @fint<=@fsumbegin--自行4102添加1653需要语句set @fint=@fint+1endwww.zgxue.com防采集请勿采集本网。

前言:

前段时间新项目上线为了赶进度很多模块的功能都没有经过详细的测试导致了生成环境中的数据和实际数据对不上,因此需要自己手写一个数据库脚本来更新下之前的数据。(线上数据库用是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 临时表 查找并删除的实现代码浅析SQL server 临时表SQL Server遍历表中记录的2种方法(使用表变量和游标)sqlserver中遍历字符串的sql语句SQLServer用存储过程实现插入更新数据示例

你说的2113是临时表还是表变量?如果是临时表5261的话跟普通表没4102有区别:比如CREATE TABLE #Test(a int,b int)CREATE INDEX IX_test ON #Test(a)如果是表变量不1653支持直接创建索引,但是可疑在声明表变量的时候设置主键。比如declare @table table(id int IDENTITY PRIMARY KEY,a int,b int);,select * into cursor t1 from table1 readwriteselect t1index on .... &&建索引内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • sql server高级内容之case语法函数概述及使用
  • sqlserver数据库备份后无法还原的解决办法
  • 在sql server中使用sql语句查询一个存储过程被其它所有的存储过程
  • sql中的isnull函数使用介绍
  • 利用sql server触发器实现表的历史修改痕迹记录
  • sqlservers 数据整理方法
  • sql server 文件操作方法
  • sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环
  • 创建动态mssql数据库表
  • sql 删除表中的重复记录
  • SQL Server中怎样在临时表中创建索引?
  • MSSQL用While循环创建临时表的问题
  • sql 如何把一个查询结果当作一个表来查询?
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页sqlserver中临时表与表变量的区别分析sql server创建临时表的两种写法和删除临时表sqlserver 临时表的用法sql server 临时表 查找并删除的实现代码浅析sql server 临时表sql server遍历表中记录的2种方法(使用表变量和游标)sqlserver中遍历字符串的sql语句sqlserver用存储过程实现插入更新数据示例sql server高级内容之case语法函数概述及使用sqlserver数据库备份后无法还原的解决办法在sql server中使用sql语句查询一个存储过程被其它所有的存储过程sql中的isnull函数使用介绍利用sql server触发器实现表的历史修改痕迹记录sqlservers 数据整理方法sql server 文件操作方法sql存储过程游标循环的用法及sql如何使用cursor写一个简单的循环创建动态mssql数据库表sql 删除表中的重复记录sql server 2012 安装图解教程(附sql server数据库入门学习总结microsoft sql server 2012 数据sql重复记录查询的几种方法win7系统安装sqlserver2000的详细sqlserver中distinct的用法(不重sql server错误代码大全及解释(sql-order by 多字段排序(升序、sql将一个表中的数据插入到另一个用sql语句添加删除修改字段、一些sql server 公用表表达式(cte)实现递归的sql触发器实例讲解实例讲解sql server排名函数dense_rank的秒懂drop、truncate和delete的区别sql server基础之行数据转换为列数据sqlserver 自定义函数 function使用介绍实例理解sql中truncate和delete的区别详解db2 sqlstate 57016 sqlcode=-668 原sql语句返回主键scope_identity()sql语句优化之用exists替代in、用not exi
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved