我在一个 SqlCommand 中对不同的查询进行批处理,当达到 2100 个参数限制时停止批处理查询。如果我的批次有 2100 或 2099 个参数,我仍然会遇到异常。
即使参数数量少于 2100,以下测试代码也会抛出“参数过多异常”。
var parametersMax = 2099;
var connection = new SqlConnection(@"Data Source=.;Integrated Security=SSPI;");
connection.Open();
var enumerable = Enumerable.Range(0, parametersMax);
var query = string.Format("SELECT {0}", String.Join(", ", enumerable.Select(s => string.Format("P{0} = @p{0}",s))));
var command = new SqlCommand(query, connection);
foreach(var i in enumerable)
command.Parameters.Add(string.Format("p{0}",i), i);
// here: command.Parameters.Count is 2099
var reader = command.ExecuteReader(); // throws: The incoming tabular data stream (TDS) remote procedure call (RPC) protocol stream is incorrect. Too many parameters were provided in this RPC request. The maximum is 2100.
考虑这里的异常消息和文档:http://msdn.microsoft.com/en-us/library/ms143432.aspx http://msdn.microsoft.com/en-us/library/ms143432.aspx我原本期望在一个查询中能够有 2100 个参数,但这似乎并非如此。有谁知道为什么?我错过了什么吗?
(我使用的是Sql Server 2008 R2)
发送到 SQL Server 的命令是
exec sp_executesql
N'SELECT P0 = @p0, P1 = @p1, P2 = @p2...',
N'@p0 int,@p1 int,@p2 int...',
@p0=0,@p1=1,@p2=2...
请注意,调用中的 2 个参数槽sp_executesql
正在处理NVARCHAR
查询文本和参数定义的字符串因此“仅”留下 2,098 个免费供您使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)