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