SQL-запрос не принимает значения больше 2100 - PullRequest
3 голосов
/ 16 июня 2010
SELECT MachineID, MachineName, count(ID) as Total, sum(Size) as TotalSize 
  FROM Files 
  join Machines on Files.MachineID = Machines.MachineID 
 Where Files.MachineID In(sql.Append(string.Format("@MachineId{0}", i));
 group by Files.MachineID,MachineName

теперь, когда счетчик machinId меньше 2100, запрос выполняется, и если число машин превышает 2100, выдается ошибка Ошибка:

Неверный поток протокола RPC для входящего потока табличных данных (TDS). Слишком много параметров было предоставлено в этом запросе RPC. Максимум 2100.

как мне сделать увеличение лимита или просто избежать этой ошибки .. и поместить значения в gridview спасибо ..

Ответы [ 2 ]

4 голосов
/ 16 июня 2010

В вашем примере вы не говорите, откуда взялась ваша переменная "sql", но если вы вручную создадите свой список IN (путем построения строки с разделенными запятыми значениями в вашем операторе IN), то все популярные реляционные БД ограничение на количество значений, которые вы можете указать в статическом предложении IN. База данных, которую вы используете, имеет ограничение 2100. Я считаю, что Oracle составляет 1000

0 голосов
/ 16 июня 2010

вы можете использовать строковые функции. В SQL Server ваше предложение WHERE будет выглядеть примерно так:

...WHERE CHARINDEX(':' + <: delimited list of machine IDs> + ':', 
       ':' + CAST(Files.MachineID as VARCHAR(10)) + ':') <> 0

Разделители: необходимы для предотвращения совпадения 100 с 1001, 1002, 2100 и т. Д. Пример строки запроса будет

...WHERE CHARINDEX(':1000:1001:1002:1005:', 
       ':' + CAST(Files.MachineID as VARCHAR(10)) + ':') <> 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...