我在一個SqlCommand中批處理不同的查詢,當我點擊2100參數限制時停止查詢批處理。如果我的批處理有2100或2099個參數,我仍然會遇到異常。SqlCommand最大參數異常在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我期待能在一個查詢中有2100個參數,但這似乎不是真的。有誰知道爲什麼?我錯過了什麼嗎?
(我使用SQL Server 2008 R2)
你在使用這麼多的參數?您是否考慮過使用表值參數? –
它是否適用於2098/2097 /等。我認爲SQL有默認的ReturnValue參數。 –
我不能使用設計,我很好地分裂多個批次的查詢。我只是想知道爲什麼我不能使用2100參數。 – marcob