Pakuję różne zapytania w jednym SqlCommand, zatrzymując zadanie zapytań po przekroczeniu limitu parametrów 2100. Jeśli moja partia ma parametry 2100 lub 2099, nadal otrzymuję wyjątek.Wyjątek maksymalnych parametrów SqlCommand na 2099 parametrach
Poniższy kod badanie rzuca „zbyt wiele parametrów wyjątek” nawet jeśli liczba parametrów jest mniejsza niż 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.
Uwzględniając komunikat wyjątku i dokumentację tutaj: http://msdn.microsoft.com/en-us/library/ms143432.aspx Spodziewałem się móc w jednym zapytaniu ma 2100 parametrów, ale nie wydaje się to prawdą. Czy ktoś wie, dlaczego? Czy czegoś brakuje?
(używam programu SQL Server 2008 R2)
Do czego używasz tej dużej liczby parametrów? Czy zastanawiałeś się nad użyciem parametru o wartości tabeli? –
Czy działa z 2098/2097/etc. Myślę, że istnieje parametr ReturnValue, domyślnie SQL. –
Nie mogę tego użyć z założenia, nie mam problemu z dzieleniem zapytań w wielu partiach. Chciałem tylko wiedzieć, dlaczego nie mogę użyć 2100 parametrów, jak to jest napisane. – marcob