SQL查询的值不超过2100

时间:2010-06-15 21:07:32

标签: c# asp.net sql gridview

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,则抛出错误 错误:

  

传入的表格数据流(TDS)远程过程调用(RPC)协议流不正确。此RPC请求中提供的参数太多。最高为2100.

如何增加限制或者只是避免出现此错误..并将值放在gridview中 感谢..

2 个答案:

答案 0 :(得分:4)

在你的例子中你没有说你的“sql”变量来自哪个但是如果你手动建立你的'IN'列表(通过在你的IN语句中用逗号分隔的值构建一个字符串),那么所有流行的关系数据库都有您可以在静态IN子句中指定的值的限制。您正在使用的数据库具有2100限制。我相信Oracle是1000

答案 1 :(得分:0)

你可以使用字符串函数。在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