mybatis where in語句中參數過多


ps : mybatis在in中參數過多

出現問題

com.microsoft.sqlserver.jdbc.SQLServerException: 傳入的請求具有過多的參數。該服務器支持最多 2100 個參數

原因

  • SqlServer 對語句的條數和參數的數量都有限制,分別是 1000 和 2100。
  • Mysql 對語句的長度有限制,默認是 4M。
  • Mybatis 對動態語句沒有數量上的限制

https://blog.csdn.net/wangfei964279744/article/details/78352055#commentsedit


### 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 個參數。請減少參數的數目,然后重新發送該請求。

解決方案

SQLserver對可以設置的參數有限制。

我們可以采用自己拼接 SQL 語句的方式來實現 in 的操作

我在 java 代碼中進行如下操作

String list = parkingIdss.toString();
        String list1 = list.substring(1, list.length() - 1);
        List<ParkingVo> parking = null;
        if ("".equals(list1)) {
            parking = parkMapper.selectParkingInfoByPrimaryKeyList(null);
        } else {
            parking = parkMapper.selectParkingInfoByPrimaryKeyList("(" + list1 + ")");
        }

SQL 語句中如下操作:

<where>
    <if test="list != null">
        and p.Id in ${list}
       
    </if>
</where>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM