欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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>