0

我正在查询 Nhibernate 条件查询,其中 In 子句的值超过 2100 个。我做了类似 Session.CreateCriteria(typeof()).Add(Expression.In("fieldName",arrayValue)) 之类的事情,其中​​ arrayValue 包含超过 2100 个值。我遇到错误 发生异常:UnknownError NHibernate.ADOException: could not execute query ..then the query with more then 3000 values in array. 在谷歌的帮助下,我们发现 Sql 中的 IN 子句仅支持 2100 个值。有没有人之前遇到过类似的问题?我们不想更改查询,因为它是以某种通用方式编写的,而不是定制的。

4

2 回答 2

2

You could split the array into multiple batches, query multiple times, and then combine the result.

于 2012-10-25T11:48:44.157 回答
2

这是 SQL Server 的限制。我不建议这样做,但如果你坚持,你可以通过创建一个表值 sql 函数(参见http://www.dzone.com/snippets/function-getting-comma)来解决它用逗号(或任何你想要的分隔符)字符串并将值作为表返回,然后将所有 ID 作为(例如)1 个参数中的逗号分隔列表传递,并在条件查询中使用 SQLCriterion。

例如:

  criteria.Add(
      new SQLCriterion("{alias}.ID IN (SELECT element FROM dbo.GetCSVValues(?))", 
          new[]{csvListOfIds}, 
          new[]{NHibernateUtil.String}))
于 2012-10-25T10:28:39.107 回答