24

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

显然,在子句中不应一次构建 1 个参数。谢谢伊巴蒂斯。

4

4 回答 4

21

最好的办法是修改您的应用程序以将少于 2100 个参数传递给存储过程。这是一个不能提高的 DBMS 限制

于 2009-06-22T17:50:20.027 回答
15

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

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

原来 ids 数组有超过 2100 项,似乎 DataContext 在生成的 SQL 查询中为数组中的每个项添加了一个参数。

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

于 2009-08-25T09:24:42.510 回答
9

你可以做几件事:

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

如果您将 2100 个参数传递给单个存储过程,那么您只是做错了事。不要提高限制或试图解决这个可憎的问题,弄清楚如何正确地做事。

于 2009-06-22T18:14:16.043 回答