.NET使用SqlSugar实现单列批量更新的几种实现和对比

说明:

  • SqlSugarCore版本:5.1.4.169

方式1 使用SqlSugar的Updateable

特点:

  • 代码可读性好,易于维护
  • 支持事务和异常处理

适用场景:

  • 中小型数据量更新

优点:

  • 代码简洁
  • 易于调试

缺点:

  • 性能相对较低
  • 内存占用较大
public async Task<int> BatchUpdateColumnAsync(string tableName,string columnName,List<KeyValuePair<int, object>> idValuePairs)
{try{// 验证输入if (string.IsNullOrEmpty(tableName) ||string.IsNullOrEmpty(columnName) ||!idValuePairs.Any()){return 0;}// 构建更新数据var updateData = idValuePairs.Select(x => new Dictionary<string, object>{{ "ID", x.Key },{ columnName, x.Value }}).ToList();// 执行批量更新return await _sqlSugarClient.Updateable(updateData).AS(tableName).WhereColumns("ID").ExecuteCommandAsync();}catch (Exception ex){// 处理异常throw new Exception($"批量更新列 {columnName} 失败", ex);}
}

方式2 使用CASE WHEN SQL

特点:

  • 采用 CASE WHEN 语法

适用场景:

  • 中等数据量更新

优点:

  • 执行效率高

缺点:

  • 可维护性较差
public async Task<int> BatchUpdateColumnAsync(string tableName,string columnName,List<KeyValuePair<int, object>> idValuePairs)
{// 构建SQLvar sql = $"UPDATE {tableName} SET {columnName} = CASE Id ";foreach (var pair in idValuePairs){sql += $"WHEN {pair.Key} THEN @value{pair.Key} ";}sql += $"END WHERE Id IN ({string.Join(",", idValuePairs.Select(p => p.Key))})";// 构建参数var parameters = idValuePairs.Select(p => new SugarParameter($"@value{p.Key}", p.Value)).ToArray();// 执行更新return await _sqlSugarClient.Ado.ExecuteCommandAsync(sql, parameters);
}

方式3 批量SQL语句

特点:

  • 多条 UPDATE 语句拼接
  • 每条记录独立更新

适用场景:

  • 小批量数据更新
  • 需要独立处理每条记录的场景
  • 需要精确控制的场景

优点:

  • 实现简单
  • 易于理解
  • 灵活性高

缺点:

  • 性能一般
  • 不适合大量数据
public async Task<int> BatchUpdateColumnAsync(string tableName,string columnName,List<KeyValuePair<int, object>> updates)
{var sqlList = updates.Select(x =>$"UPDATE {tableName} SET {columnName} = @value{x.Key} WHERE Id = {x.Key};");var sql = string.Join("\n", sqlList);var parameters = updates.Select(x => new SugarParameter($"@value{x.Key}", x.Value)).ToArray();return await _sqlSugarClient.Ado.ExecuteCommandAsync(sql, parameters);
}

方式4 Bulk Update(大批量数据更新,性能要求高的场景)

特点:

  • 使用 DataTable 批量操作
  • 高性能实现

适用场景:

  • 大批量数据更新
  • 性能要求高的场景
  • 需要处理大量数据的场景

优点:

  • 性能最优
  • 内存效率高
  • 适合大数据量

缺点:

  • 需要额外的数据转换
public async Task<int> BatchUpdateColumnAsync(string tableName,string columnName,List<KeyValuePair<int, object>> updates)
{// 创建 DataTablevar dt = new System.Data.DataTable(tableName);dt.Columns.Add("ID", typeof(int));dt.Columns.Add(columnName, typeof(object));  // 使用传入的列名// 添加数据foreach (var update in updates){dt.Rows.Add(update.Key, update.Value);}// 批量更新return await _sqlSugarClient.Fastest<System.Data.DataTable>().AS(tableName).BulkUpdateAsync(tableName, dt, new string[] { "ID" }, new string[] { columnName });
}

使用

// 使用示例
var updates = new List<KeyValuePair<int, object>>
{new KeyValuePair<int, object>(1, 89.6), // (id, 更新值)new KeyValuePair<int, object>(2, 999.7)
};
// 表名,列名,更新数据
await BatchUpdateColumnAsync("tb_import_data", "WaterLevel", updates);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/5765.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

HTML 标签属性——id、class、style 等全局属性详解

文章目录 1. id属性2. class属性3. style属性4. title属性5. lang属性6. dir属性7. accesskey属性8. tabindex属性小结HTML全局属性是一组可以应用于几乎所有HTML元素的特殊属性。这些属性提供了额外的功能和信息,使得网页开发者能够更好地控制元素的行为、样式和可访问性。 …

Dubbo详解及其应用

Dubbo Dubbo是一个阿里巴巴开源的高性能Java RPC框架&#xff0c;专为解决大规模微服务架构中的服务治理、服务发现、负载均衡和远程通信等问题而设计。它允许服务提供者将业务功能封装成服务&#xff0c;而服务消费者则可以像调用本地方法一样调用这些远程服务&#xff0c;从而…

python爬取旅游攻略(1)

参考网址&#xff1a; https://blog.csdn.net/m0_61981943/article/details/131262987 导入相关库&#xff0c;用get请求方式请求网页方式&#xff1a; import requests import parsel import csv import time import random url fhttps://travel.qunar.com/travelbook/list.…

推荐一款便捷的图像处理工具:Photo Collage Maker

Photo Collage Maker是一款便捷的图像处理工具&#xff0c;能够对图像进行拼接和剪辑&#xff0c;帮助用户轻松实现各类图像效果的添加。该软件支持图片框的添加以及图片分享功能&#xff0c;适合用于制作照片拼贴、个性化相册、美丽的剪贴簿等创意项目。 软件特点 简单易用 …

yolo v5 开源项目

项目地址&#xff1a;https://gitcode.net/EricLee/yolo_v5

《化纤与纺织技术》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问&#xff1a;《化纤与纺织技术》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《化纤与纺织技术》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a;广东粤能&#xff08;集团&#xf…

Python 爬取大量数据如何并发抓取与性能优化

Python 并发抓取与性能优化 在进行网络爬虫开发时&#xff0c;爬取大量数据可能非常耗时。尤其是在处理许多网页或 API 请求时&#xff0c;逐个请求速度会非常慢。为了解决这个问题&#xff0c;我们可以通过并发抓取提高爬取效率。同时&#xff0c;通过性能优化来进一步减少耗…

Centos开机自启动脚本示例

本文建议创建一个sh文件管理自启动的各项内容&#xff0c;再将sh文件设置开机启动 在/root/autoshell下创建一个autostart.sh&#xff0c;内容如下 #!/bin/bash # description:开机自启脚本# 启动mongodb sh /root/software/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod --c…

猫头虎分享: AI设计利器 Recraft详解与基础使用教程

&#x1f981;猫头虎分享&#xff1a;AI设计利器 Recraft——全面解析与教程 大家好&#xff0c;我是猫头虎&#xff01;今天为大家带来一款非常炙手可热的 AI 设计工具 —— Recraft 的深度介绍与详细教程。这款工具自推出以来&#xff0c;就迅速获得了全球设计师的青睐。那么…

Spring AI : 让ChatGPT成为你构建应用的核心亮点

本文是一篇介绍spring ai的文章&#xff0c;主要介绍了生成文本内容&#xff0c;以及读取图片中内容两个能力。 之所以介绍这两个能力&#xff0c;是因为 大模型目前最适合做的事情有两个&#xff1a; 1&#xff09; 非结构化数据的结构化&#xff08;图片转文字&#xff0c;…

Qt(openCV的应用)

1. OpenCV简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;它提供了丰富的图像处理和计算机视觉功能。该库由英特尔公司发起&#xff0c;并在 BSD 许可证下发布&#xff0c;因此它是免费的&#xff0c;且开放源代…

Excel快速转换文档word工具

【注意事项&#xff1a;】 1、目前支持Win10/11 x64操作系统&#xff0c;已亲测可正常运行。 2、工具解压后在 \excel_docx\excel\目录中提供了转换前的标准模板“testcase.xlsx”&#xff0c;测试童鞋在使用Zentao、JIRA等测试工具导出excel&#xff08;.xlsx后缀&#xff0…

uniapp 集成 uview

注意&#xff1a;HBuildX新建项目时必须选择vue2版本&#xff0c;vue3会不支持uview 下载安装方式&#xff1a; uview安装网站&#xff1a;uView2.0重磅发布&#xff0c;利剑出鞘&#xff0c;一统江湖 - DCloud 插件市场 配置&#xff1a; 1.安装sass插件 // 安装sass npm i …

想要搭建陪玩系统小程序,这几点不容忽视,陪玩系统源码框架

随着互联网经济的持续稳定发展&#xff0c;游戏市场的“封印”逐渐被打开&#xff0c;搭建陪玩平台成为一个新的热点。提起陪玩系统相信大家也不陌生&#xff0c;漫漫单排路如果有一个大神能带自己躺赢那是再好不过了&#xff0c;于是陪玩系统运营而生。想要搭建陪玩平台&#…

【论文笔记】Dense Connector for MLLMs

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: Dense Connector for MLLM…

[论文阅读]A Survey of Embodied Learning for Object-Centric Robotic Manipulation

Abstract --以对象为中心的机器人操纵的Embodied learning是体现人工智能中一个快速发展且具有挑战性的领域。它对于推进下一代智能机器人至关重要&#xff0c;最近引起了人们的极大兴趣。与数据驱动的机器学习方法不同&#xff0c;具身学习侧重于通过与环境的物理交互和感知反…

vscode的一些使用心得

问题1&#xff1a;/home目录空间有限 连接wsl或者remote的时候&#xff0c;会在另一端下载一个.vscode-server&#xff0c;vscode的插件都会安装进去&#xff0c;导致空间增加很多&#xff0c;可以选择更换这个文件的位置 参考&#xff1a;https://blog.csdn.net/weixin_4389…

Vue前端开发之自定义动画样式

在上一小节中&#xff0c;我们介绍了动画的实现源于6个类别样式&#xff0c;它们的名称默认前缀是一个“v”字母或者指定的名称&#xff0c;如“sc”&#xff0c;其实&#xff0c;也可以不使用这些固定的类别样式&#xff0c;开发者可以自定义任意的类别样式&#xff0c;供动画…

【709】基于SSM+vue的“萌宠小知识”网站设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统萌宠小知识信息管理难度大&#xff0c;容错率低&#xff…

《机器学习by周志华》学习笔记-神经网络-05RBF径向基函数网络

1、背景 1988年,Broomhead和Lowe用径向基函数(Radialbasis function, RBF)提出分层网络的设计方法,从而将神经网络的设计与数值分析和线性适应滤波相挂钩。 2、概念 RBF(Radial Basis Function,径向基函数)网络是一种单隐层前馈神经网络,即该网络只有3层,输入层、隐含…