sql在update更新时如何快速且大批量的更新数据

sql在update更新时如何快速且大批量的更新数据,第1张

使用merge语句吧

语法:

MERGE INTO 目标表 AS A

USING 源表 AS B

ON (ACOL = BCOL) --匹配条件

WHEN MATCHED THEN --当匹配上就用B表的字段更新A表的字段

UPDATE SET

ACOL1 = BCOL1,

ACOLn = BCOLn

WHEN NOT MATCHED THEN INSERT(ACOL1,,ACOLn) --下面这句是不匹配就插入数据

VALUES (BCOL1,,BCOLn);

update z set z你要更新的字段名 = br

from 你的表名 z

left join 

(

select apk, case ar % 16 when 0 then 16 else ar % 16 end as r

from

(

select 主键 as pk,row_number() over(order by 主键) as r

from 你的表名

) a

) b on z主键 = bpk

在处理百万级的数据方面,也不一定需要存储过程,用C#一样可以;ADONET提供了常用对象即可解决,就是数据适配器,在处理海量数据的时候,表现还是可圈可点的。先指定参数,接着一个循环,例: for (int i = 0; i < 100; i++)

{

datasetTables[0]Rows[i]BeginEdit();

datasetTables[0]Rows[i]["time"] = "2222-22-22 22:22:22";

datasetTables[0]Rows[i]["value"] = 100;

datasetTables[0]Rows[i]["id"] = "ID"+(i+10000);

datasetTables[0]Rows[i]EndEdit();

}接着一次提交更新就OK了数据适配器Update(datasetTables[0]);然后释放资源,把数据集合适配器的资源都释放掉,连接也返回池中。 datasetTables[0]Clear();

适配器Dispose

datasetDispose要注意的是,你在取记录填充到数据集里面的时候,不要一次去提取100万条,那样你的数据库引擎会不堪重负的。要根据你的硬件配置,每次提取适量的数据,如果配置不是很高,一次提取个500-600就行了,这样很快就能把数据在循环中处理完毕而不是卡到CPU暴涨直到死机。

update a set atype=btype from b where aid=bid

为什么要一次更新1000条那,如果你硬是想要那样更新那就在加上个条件如下

update a set atype=btype from b where aid=bid

and aid in(select top 1000 aid from a,b where aid=bid and atype!=btype)

你数据有那么大,更新肯定是很慢的,你可以从下面两个方面考虑:

一、你要在3千万的数据里面查询,一定要走索引,就是对查询条件的字段建立索引

二、插入到的表和更新的表如果太大,如果插入非常频繁,可以插入取消部分索引。

以上就是关于sql在update更新时如何快速且大批量的更新数据全部的内容,包括:sql在update更新时如何快速且大批量的更新数据、怎么用sql修改一列的数据使其循环递增、c# winform 如何批量更新数据库数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9403700.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存