sql server 批量更新数据多张表 更高效的方法

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是传进来的表参数
四、如果不用存储过程,自己组合更新字符串进行更新
五、记得用事务,保证完整性

您可以参考一下这篇文章
https://blog.csdn.net/zsw119/article/details/119147359?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7-119147359-blog-113858941.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-7-119147359-blog-113858941.pc_relevant_aa&utm_relevant_index=14

我只会在 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#代码来写,你这个需要更新的表太多,很难保证数据更新的一致性的,即使采用强数据一致性来处理,那也会存储性能极低的情况。

https://ask.csdn.net/questions/7751001?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1-7751001-ask-7763856.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1-7751001-ask-7763856.pc_feed_download_top3ask

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