0

In 句の値が 2100 を超える Nhibernate 基準クエリをクエリしています。私は Session.CreateCriteria(typeof()).Add(Expression.In("fieldName",arrayValue)) のようなことをしますが、arrayValue には 2100 を超える値が含まれています。エラー 例外が発生しました: UnknownError NHibernate.ADOException: クエリを実行できませんでした ..then the query with more than 3000 values in array. グーグルの助けを借りて、SQLのIN句が2100までの値しかサポートしていないことがわかりました。以前に同様の問題に直面した人はいますか? クエリは、カスタマイズされたものではなく、一般的な方法で記述されているため、変更したくありません。

4

2 に答える 2

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 に答える
2

配列を複数のバッチに分割し、複数回クエリを実行してから、結果を組み合わせることができます。

于 2012-10-25T11:48:44.157 に答える