所以我尝试使用下面的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服务器。谢谢!