我正在查询Nhibernate条件查询,其中包含超过2100个In子句值。 我做类似Session.CreateCriteria(typeof())的东西。添加(Expression.In(“fieldName”,arrayValue)) 其中arrayValue包含超过2100个值。我面临错误 发生例外: 未知错误 NHibernate.ADOException:无法执行查询..然后在数组中包含超过3000个值的查询。 通过一些谷歌帮助,我们发现Sql中的IN子句仅支持2100个值。 有没有人早些时候遇到类似的问题?我们不希望更改查询,因为它是以某种通用方式编写的,而不是自定义的。
答案 0 :(得分: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}))
答案 1 :(得分:2)
您可以将数组拆分为多个批次,多次查询,然后合并结果。