Java MyBatis,RPC请求中提供的参数太多。最大值为2100

Java MyBatis,RPC请求中提供的参数太多。最大值为2100,java,sql-server,mybatis,spring-mybatis,Java,Sql Server,Mybatis,Spring Mybatis,所以我尝试使用MyBatis进行批插入,下面是我的xml映射器 <insert id="insertMessages" parameterType="java.util.List"> INSERT INTO Messages(user, id, month, key, value, name, message, dateCreated, createdBy) VALUES <foreach item="item" collection=

所以我尝试使用MyBatis进行批插入,下面是我的xml映射器

<insert id="insertMessages" parameterType="java.util.List">
    INSERT INTO Messages(user, id, month,
    key, value, name,
    message, dateCreated, createdBy)
    VALUES
    <foreach item="item"  collection="list" open="(" separator="),("  close=")">
                #{item.user},
                #{item.id},
                #{item.month},
                #{item.key},
                #{item.value},
                #{item.name},
                #{item.message},
                GETDATE(),
                #{item.createdBy}
    </foreach>

</insert>

插入到消息中(用户、id、月份、,
键、值、名称、,
消息、日期已创建、已创建)
价值观
#{item.user},
#{item.id},
#{item.month},
#{item.key},
#{item.value},
#{item.name},
#{item.message},
GETDATE(),
#{item.createdBy}
目前,它只在批量大小为200或更少时起作用。任何大于200的值,都将获取错误:

-传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。RPC请求中提供的参数太多。最大值为2100


这是由于SQL server无法接受超过2100个参数,myBatis使用“”生成查询,然后将参数传递给查询。在我的例子中,它是8个参数,所以如果批处理是300,那么2400个参数将传递给DB。因此,我可以不断调整插入的批量插入大小,但可能有更好的方法。我可以做些什么来避免SQL server端的参数限制?无需更改SQL server。谢谢

看起来您正在插入9个参数。寻找SQL Bulk Insert,这应该会有帮助。谢谢@Chuck,但据我所知,Bulk Insert通常用于插入文件,在我的情况下,我通过java将值插入到表中,而不使用任何文件,使用Bulk Insert应该如何完成?你能尝试将插入拆分为一组较小的插入吗,比如一次可能只有100行?是的,我可以这样做,但我正在构建的应用程序需要更高的效率和许多每行超过9个参数的批插入。因此,如果可能的话,我不想总是计算批量插入的最大大小。这不是批量插入。这是一个巨大的sql语句,并且您达到了其中参数的限制。搜索“mybatis批量插入”,您将找到几个答案,这些答案会给您类似的提示