Estoy cargando diferentes consultas en un SqlCommand deteniendo el lote de consultas cuando llego al límite de 2100 parámetros. Si mi lote tiene parámetros 2100 o 2099, aún recibo la excepción.Excepción de parámetros máximos de SqlCommand en 2099 parámetros
El siguiente código de prueba lanza 'demasiados parámetros excepción', incluso si el número de parámetros es inferior a 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.
Teniendo en cuenta el mensaje de excepción y la documentación aquí: http://msdn.microsoft.com/en-us/library/ms143432.aspx que estaba esperando para poder tiene 2100 parámetros en una consulta, pero esto no parece ser cierto. ¿Alguien sabe por qué? ¿Me estoy perdiendo de algo?
(estoy usando SQL Server 2008 R2)
¿Para qué está utilizando esta gran cantidad de parámetros? ¿Ha considerado utilizar un parámetro con valores de tabla en su lugar? –
Funciona con 2098/2097/etc. Creo que hay un parámetro ReturnValue que SQL tenía de forma predeterminada. –
No puedo usar eso por diseño, estoy bien dividiendo las consultas en varios lotes. Solo quería saber por qué no puedo usar 2100 parámetros como dice. – marcob