2012-10-25 5 views
0

In 절에 대해 2100 개 이상의 값으로 Nhibernate 조건 쿼리를 쿼리합니다. Add (Expression.In ("fieldName", arrayValue)) 여기서, arrayValue는 2100 개 이상의 값을 포함합니다. 나는 얼굴 에러 예외가 발생했습니다 : UnknownError NHibernate.ADOException : 배열에서 3000 개 이상의 값을 가진 쿼리를 실행할 수 없습니다. 일부 Google 도움말에서 Sql의 IN 절이 2100 값까지만 지원된다는 것을 알았습니다. 비슷한 문제가있는 사람이 있습니까? 쿼리가 일반적인 방식으로 작성되었으므로 쿼리를 변경하지 않고 사용자 지정 방식으로 변경하지는 않습니다.Nhibernate Expression.In 제한

답변

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

당신은 여러 배치로 배열을 분할 여러 번 조회 한 다음 결과를 결합 할 수 있습니다.