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

时间:2016-05-12 14:25:39

标签: java sql-server mybatis spring-mybatis

所以我尝试使用下面的MyBatis进行批量插入是我的xml mapper

<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>

现在它仅在批量大小为200或更小时才有效。任何超过200的,都会收到错误:

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

这是由SQL服务器无法使用超过2100个参数,而myBatis使用“?”构建查询然后将参数传递给查询。在我的情况下,它是8个参数,因此如果批次是300,则将2400个参数传递给DB。所以我可以继续调整插件的批量插入尺寸,但可能有更好的方法。如果不在SQL服务器端遇到此参数限制,我该怎么办?无需更改SQL服务器。谢谢!

0 个答案:

没有答案