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