Nhibernate Expression.In limit

Я запрашиваю запрос критериев Nhibernate с более чем 2100 значениями для предложения In. Я делаю что-то вроде Session.CreateCriteria (typeof ()). Add (Expression.In ("fieldName", arrayValue)), где arrayValue содержит более 2100 значений. Я сталкиваюсь с ошибкой. Произошло исключение: UnknownError NHibernate.ADOException: не удалось выполнить запрос .. затем запрос с более чем 3000 значений в массиве. с помощью Google мы выяснили, что предложение IN в Sql поддерживает только до 2100 значений. Кто-нибудь сталкивался с подобной проблемой раньше? Мы не хотим изменять запрос, поскольку он написан в некотором общем виде, а не настроен.


person Niraj    schedule 25.10.2012    source источник


Ответы (2)


Это ограничение SQL Server. Я бы не советовал это делать, но если вы настаиваете, вы можете обойти это, создав функцию sql с табличным значением (см. http://www.dzone.com/snippets/function-getting-comma), который разбивает строку запятыми (или любым другим разделителем, который вы хотите) и возвращает значения в виде таблицы. , а затем передайте все свои идентификаторы как (скажем) список, разделенный запятыми, в 1 параметре и используйте SQLCriterion в своем запросе критериев.

eg:

  criteria.Add(
      new SQLCriterion("{alias}.ID IN (SELECT element FROM dbo.GetCSVValues(?))", 
          new[]{csvListOfIds}, 
          new[]{NHibernateUtil.String}))
person Martin Ernst    schedule 25.10.2012

Вы можете разделить массив на несколько пакетов, запросить несколько раз, а затем объединить результат.

person Oskar Berggren    schedule 25.10.2012