欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > .NET使用SqlSugar实现单列批量更新的几种实现和对比

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

2025/11/11 20:23:43 来源:https://blog.csdn.net/mengningyun6826/article/details/143572193  浏览:    关键词:.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);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词