c#
sql server 批量更新数据
gridview选择需要更新的数据,以A表选取的内容向其余12张表更新数据(以UID和dataime 作为条件),表的字段都不一样只有UID是一样的,DATAtime条件字段不同内容相同。使用循环更新2000条数据太慢,哪种方式更高效执行更快呢?
麻烦提供源码案例和使用方法
一、获取要更新的列表(gridview的选中项或者变更项)
二、加密字段内容及其他处理
三、如果用存储过程更新则传表值参数,列表转成Datatable传进去,存储过程中写更新语句,例如:update a set xxx=0 from table1 a inner join paramTable b on a.UID = b.UID and ……,其中paramTable是传进来的表参数
四、如果不用存储过程,自己组合更新字符串进行更新
五、记得用事务,保证完整性
我只会在 hive中操作 update w
set w.TagCount=x.TagCount
from (select ItemID,COUNT(*) as TagCount from r where IsValid=1 group by ItemID) as x
where ID =4 and IsValid=1 and w.ID=x.ItemID
循环更新2000条数据
不要一下循环2000条,试试50条或100条更新,再更新剩下的,用事务控制下
建议采用后端处理,2000条数据量不算大。放在事务里面,可以组装update语句直接执行。
sql server 批量更新数据多张表 更高效的方法
/**
* 组合批量更新sql 方法
* @param string $updata 需要更新的数据
* @param string $table 表名
* @param string $colnum 要更新的字段名
* @param string $whereColnum 条件字段
* @author jackbon<460880674@qq.com>
* @return string
*/
function updateSql($updata,$table,$colnum,$whereColnum)
{
$zhong = '';
foreach ($updata as $value)
{
$zhong .= "WHEN {$value['id']} THEN '{$value['title']}' ";
$ids[] = $value['id'];
}
$ids = implode(',',$ids);
$sql = "UPDATE {$table} SET {$colnum} = CASE {$whereColnum} {$zhong} END WHERE {$whereColnum} IN ({$ids})";
return $sql;
}
按照你说的,建议你使用 SQL Server的存储过程加上代码来实现,比如当你GridView选中需要更新的数据后,可以把这些数据打包成集合发送给存储过程,然后再存储过程中循环这些选中修改数据,然后再分条件的向各章表进行数据更新,直到全部更新完成事务提交即可。
如果不使用存储过程,仅只使用C#代码来写,你这个需要更新的表太多,很难保证数据更新的一致性的,即使采用强数据一致性来处理,那也会存储性能极低的情况。
1、用事务处理,循环完统一提交
2、数据插入后台临时表,在用临时表一次性更新,条件字段建立索引
其实用程序控制会比较好吧;你用的C#是吧,在程序里多条更新的SQL语句,然后用事务去执行
程序里利用 UPDATE b SET b.更新字段1=a.对应字段 FROM a,b WHERE b.UID = a.UID;//如果你还需要用到 dataime作为条件的话,那就加上即可
就是不知道dataime字段是什么类型的,如果是2022-08-02 14:33:47.000 这样的类型,那可以用 CONVERT(varchar, dataime, 120 ) 来去掉毫秒 然后和没有毫秒的对比,
组合多条sql语句以后,程序在用事务去提交这些sql