此RPC请求中提供的参数太多。 最高为2100.?

搜索查询返回此错误。 我有一种感觉,因为当我试图对另一个对象进行ORM时,in子句在一个从属对象上是巨大的。

显然,在子句中不应该一次构建1个参数。 谢谢ibatis。

最好的办法是修改应用程序,将少于2100个参数传递给存储过程。 这是无法引发的DBMS限制 。

当使用一个看似无辜的LINQ to SQL查询时,我得到了同样的错误。 我只是想检索其ID是存储在数组中的所有记录:

dataContext.MyTable.Where(item => ids.Contains(item.Id)).ToArray(); 

事实certificate,ids数组有超过2100个项目,并且似乎DataContext在生成的SQL查询中为数组中的每个项添加一个参数。

最后,这是我的代码中的一个错误,因为ids数组没有这么多的项目。 但无论如何,值得记住的是,在LINQ to SQL中使用此类构造时需要进行一些额外的validation。

你可以做一些事情:

  1. 将params泵入临时表并使用所述临时表来过滤查询。 请参阅https://stackoverflow.com/a/9947259/37055
  2. 创建一个逗号分隔的数组,并将该数组作为varchar(x)传递给SQL Server。 通过TSQL将其拆分( 这里有一些方法 )并使用生成的行集来过滤搜索结果。
  3. 看看你的应用程序逻辑。 将2100个参数传递给存储过程会有点奇怪。

如果要将2100个参数传递给单个存储过程,则只是做错了。 不要提高限制或尝试解决这种可憎的行为,弄清楚如何正确行事。