2012-10-25 70 views
0

我正在查詢Nhibernate條件查詢,其中包含2100以上的In子句值。 我做了一些像Session.CreateCriteria(typeof())。Add(Expression.In(「fieldName」,arrayValue)) 其中arrayValue包含超過2100值。我遇到了錯誤 發生了異常: UnknownError NHibernate.ADOException:無法執行查詢..然後在數組中有超過3000個值的查詢。 與谷歌的一些幫助,我們發現IN子句在Sql中只支持到2100的值。 有人曾經遇到過類似的問題嗎?我們不想更改查詢,因爲它是以某種通用方式編寫的,而不是自定義的。Nhibernate表達式。限制

回答

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})) 
2

你可能分裂成數組多批次,查詢多次,然後結合的結果。