在使用Mybatis动态拼装查询参数时,执行过程中如果你的项目报错如下
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
uncategorized SQLException for SQL []; SQL state [S0001]; error code [8003]; 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
问题很明显,就是拼装参数超过2100个参数,这是jdbc给出的错误,要解决这个问题
1、将传入的参数变为一个关联表或者子查询
例如:
select * from a
left join b on a.id = b.aid
...
2、或者使用in 子查询方式
select * from a
where a.id in (select aid from b)
3、将所有参数拼接在一起,作为一个参数传入
例如使用for循环将id逗号拼接起来,形成 1,2,3,4,5,6
Mybatis中参数使用${},而不用#{}
select * from a
where a.id in (${ids})