You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Dapper与.NET 6中实现toId字段自增的批量插入咨询

实现建议

方案1:单批次内生成连续ID

如果只要求单次插入的批次里toId是连续序列(比如本次插入的10条记录toId从1到10),可以直接用数据库的窗口函数生成:

var sql = @"INSERT INTO table1 (toId, teId, dateShift, SectorOrigen)
            SELECT ROW_NUMBER() OVER (ORDER BY teID) AS toId, teID, @dateModify, @LastSector 
            FROM table2";

注:ORDER BY teID可根据实际需求替换成其他排序字段,保证序列的稳定性。

方案2:全局连续自增(跨批次衔接)

如果要求所有插入的记录toId全局连续(比如上次插入最后一条toId是10,本次插入第一条toId从11开始),需要先获取table1当前最大的toId,再结合窗口函数生成序列:

步骤1:获取当前最大toId

var maxToId = connection.QueryFirstOrDefault<int?>("SELECT ISNULL(MAX(toId), 0) FROM table1");
var startId = maxToId.GetValueOrDefault() + 1;

步骤2:生成连续序列插入

var sql = @"INSERT INTO table1 (toId, teId, dateShift, SectorOrigen)
            SELECT @StartId + ROW_NUMBER() OVER (ORDER BY teID) - 1 AS toId, teID, @dateModify, @LastSector 
            FROM table2";

connection.Execute(sql, new { StartId = startId, dateModify = yourDateModifyValue, LastSector = yourLastSectorValue });

高并发场景下,这个方法可能出现重复ID,建议加事务或者结合数据库原子操作(比如SQL Server的OUTPUT、PostgreSQL的序列)优化。

方案3:将toId设为数据库自增列(最优解)

如果业务允许,直接把table1的toId字段设为自增列,让数据库自动维护连续序列,无需手动处理:

表结构修改示例(SQL Server)

ALTER TABLE table1 ALTER COLUMN toId INT IDENTITY(1,1);

简化后的插入SQL

var sql = @"INSERT INTO table1 (teId, dateShift, SectorOrigen)
            SELECT teID, @dateModify, @LastSector 
            FROM table2";

这种方式由数据库负责ID生成,既能避免并发冲突,代码也更简洁。


内容的提问来源于stack exchange,提问作者luis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:01:26