关于数据库操作参数过多的异常

今天遇到一个略坑的异常:

com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。

看到这个异常第一个反应就是改MyBatis或SqlServer的配置,后经百度,只找到了原因:

https://blog.csdn.net/syy_c_j/article/details/52151402

  • SqlServer 对语句的条数和参数的数量都有限制,分别是 1000 和 2100。
  • Mysql 对语句的长度有限制,默认是 4M。
  • Mybatis 对动态语句没有数量上的限制

 

无果,只能自己debug看看是哪句sql的参数过多:因为session是openSession(ExecutorType.BATCH)的批处理执行,所以先将openSession的参数改为true(自动提交)

在一句批量插入的操作中抛出这个异常,查看sql发现用了foreach

 1 <!-- 批量插入问题件 -->
 2 <sql id="sqlInsertQuestions">
 3     <foreach collection="questionList" item="question">
 4         insert into cmd_Question (
 5     qu_clm_id,qu_data_id,qu_code,qu_des,qu_fieldcode,qu_data_type
 6         ) values(
 7             #{clm_id},#{question.qu_data_id},#{question.qu_code},#{question.qu_des},#{question.qu_fieldcode},#{question.qu_data_type}
 8         )
 9     </foreach>
10 </sql>

之后经过尝试,只需将sql中的for循环提出至代码中进行循环即可,即

1 for (Question question : claim.getQuestionList()) {
2     mapper.insertQuestion(question);
3 }
1 <insert id="insertQuestion" parameterType="question">
2     insert into cmd_Question (
3         qu_clm_id,qu_data_id,qu_code,qu_des,qu_fieldcode,qu_data_type
4     ) values(
5         #{qu_clm_id},#{qu_data_id},#{qu_code},#{qu_des},#{qu_fieldcode},#{qu_data_type}
6     )
7 </insert>

将一句sql中执行N次插入换成N条sql进行执行即可

转载于:https://www.cnblogs.com/s1165482267/p/9079202.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值