Sto eseguendo il batching di query diverse in un unico SqlCommand, interrompendo il batch di query quando raggiungo il limite del parametro 2100. Se il mio batch ha parametri 2100 o 2099, ottengo comunque l'eccezione.SqlCommand eccezione dei parametri massimi ai parametri 2099
Il seguente codice di prova getta 'troppi parametri eccezione', anche se il numero di parametri è inferiore 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.
Considerando il messaggio di eccezione e la documentazione qui: http://msdn.microsoft.com/en-us/library/ms143432.aspx mi aspettavo di essere in grado di avere 2100 parametri in una query, ma questo non sembra essere vero. Qualcuno sa perché? Mi sto perdendo qualcosa?
(sto usando SQL Server 2008 R2)
Per cosa si utilizza questo numero elevato di parametri? Hai considerato di utilizzare un parametro con valori di tabella? –
Funziona con 2098/2097/ecc. Penso che ci sia un parametro ReturnValue che SQL aveva per impostazione predefinita. –
Non riesco a utilizzarlo in base alla progettazione, sto bene dividendo le query in più lotti. Volevo solo sapere perché non posso usare 2100 parametri come dice. – marcob