com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
程序员文章站
2024-02-20 10:46:10
...
sqlserver数据库插入限制
传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
解决方法:分批插入
public void insertBI(List<OperatingOrderCorrection> orderCorrections) {
List<OdsTradeSell06> tradeSell06s = new ArrayList<>();
for (OperatingOrderCorrection orderCorrection : orderCorrections) {
OdsTradeSell06 tradeSell06 = new OdsTradeSell06();
tradeSell06.setDatDt(orderCorrection.getDate());
tradeSell06.setFGdID(orderCorrection.getProductId());
tradeSell06.setFGdIDNdRv(orderCorrection.getFinishedProductId());
tradeSell06.setOrdNo(orderCorrection.getOrderId());
tradeSell06s.add(tradeSell06);
}
//由于数据库对于插入字段的限制,在这里对批量插入的数据进行分批处理
int batchCount = 120;//每批commit的个数
int batchLastIndex = batchCount - 1;// 每批最后一个的下标
for (int index = 0; index < tradeSell06s.size() - 1; ) {
if (batchLastIndex > tradeSell06s.size() - 1) {
batchLastIndex = tradeSell06s.size() - 1;
sell06Mapper.insertExcel(tradeSell06s.subList(index, batchLastIndex + 1));
break;// 数据插入完毕,退出循环
} else {
sell06Mapper.insertExcel(tradeSell06s.subList(index, batchLastIndex + 1));
index = batchLastIndex + 1;// 设置下一批下标
batchLastIndex = index + (batchCount - 1);
}
}
}
mapper foreach Sql
/**
* 集合新增
*/
void insertExcel(@Param("sells") List<OdsTradeSell06> sells);
<insert id="insertExcel">
INSERT INTO
table (a, b, c, d)
VALUES
<foreach collection="sells" item="item" index="index"
separator=",">
(#{item.a}, #{item.b}, #{item.c}, #{item.d})
</foreach>
</insert>
上一篇: SpringBoot集成Swagger
下一篇: Python基础知识17——使用API