Слишком много параметров было предоставлено в этом запросе RPC. Максимум 2100. - PullRequest
23 голосов
/ 22 июня 2009

Поисковый запрос вернул эту ошибку. У меня такое чувство, потому что предложение in является ginormous для подчиненного объекта, когда я пытаюсь ORM другого объекта.

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

Ответы [ 4 ]

20 голосов
/ 22 июня 2009

Лучше всего пересмотреть приложение, чтобы передать в хранимую процедуру менее 2100 параметров. Это предел СУБД, который нельзя повысить .

14 голосов
/ 25 августа 2009

Я получил эту же ошибку при использовании явно невинного запроса LINQ to SQL. Я просто хотел получить все записи, чьи идентификаторы были среди тех, которые хранятся в массиве:

dataContext.MyTable.Where(item => ids.Contains(item.Id)).ToArray();

Оказалось, что массив ids содержал более 2100 элементов, и кажется, что DataContext добавляет один параметр для каждого элемента в массиве в результирующем запросе SQL.

В конце это была ошибка в моем коде, так как в массиве ids не должно было быть так много элементов. Но в любом случае стоит помнить, что при использовании таких конструкций в LINQ to SQL требуется дополнительная проверка.

9 голосов
/ 22 июня 2009

Вы можете сделать несколько вещей:

  1. Поместите параметры в временную таблицу и используйте указанную временную таблицу для фильтрации вашего запроса. Смотри https://stackoverflow.com/a/9947259/37055
  2. Создайте разделенный запятыми массив и передайте массив в SQL Server как varchar (x). Разделите его с помощью TSQL ( вот несколько методов ) и используйте полученный набор строк для фильтрации результатов поиска.
  3. Посмотрите на логику вашего приложения. Более чем немного странно передавать 2100 параметров хранимой процедуре.
0 голосов
/ 22 июня 2009

Если вы передаете 2100 параметров в одну хранимую процедуру, вы просто делаете что-то не так. Не повышайте лимит и не пытайтесь обойти эту мерзость, подумайте, как все сделать правильно.

...