该服务器支持最多2100个参数,拆分任务分步查询

当尝试执行一个包含超过2100个参数的SQL查询时,遇到了SQLServerException,服务器限制了最大参数数量。为了解决这个问题,提出了一个分批处理的解决方案,将参数分组,每次处理2000个,通过循环遍历所有参数并执行多次查询来完成操作。提供的代码示例展示了如何实现这一策略。
摘要由CSDN通过智能技术生成

遇到个问题,需要修改个功能这个mapper里面传的参数非常多有可能6000以上,直接传就报错了
报错信息如下

在这里插入代码片### Error querying database. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。

### The error occurred while setting parameters

### SQL:

### 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 个参数。请减少参数的数目,然后重新发送该请求。

修改思路用2000作为节点,做循环,第一次是0到2000,第二次2001到4000……
放部分代码供大家参考,实体类si中的Ptjhdidlist就是那个巨大的参数,后续就是往mapper里注入了,自行发挥吧

String[] split = ptjhdid.split(",");
if(split.length<=2000) {
	 for(int i=0;i<split.length;i++){
       	ptjhdidlist.add(split[i]);
       }
	  si.setPtjhdidlist(ptjhdidlist);
		
}else {
	int w = 2000;
	int t = 0;
	int zong = split.length;
	t=zong/w+1;
	for (int b = 0; b < t; b++) {
	int h = b*w;
	int r=(b+1)*w;
	if(r>zong){
		r=zong;
	}
		String[] spo = Arrays.copyOfRange(split, h, r);
		for(int d=0;d<spo.length;d++){
        	ptjhdidlist.add(spo[d]);
        }
		si.setPtjhdidlist(ptjhdidlist);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗十月橘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值