하나의 SqlCommand에서 다른 쿼리를 일괄 처리하여 2100 매개 변수 제한에 도달했을 때 쿼리 일괄 처리를 중지합니다. 내 배치 2100 또는 2099 매개 변수가있는 경우 나는 여전히 예외가 발생합니다. http://msdn.microsoft.com/en-us/library/ms143432.aspx 내가 할 수있을 것으로 기대 된 다음 테스트 코드는 매개 변수의 수 미만 21002099 매개 변수에서 SqlCommand 최대 매개 변수 예외
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.
는 예외 메시지 여기 설명서를 고려하더라도 '너무 많은 매개 변수 예외'가 발생
하나의 쿼리에 2100 개의 매개 변수가 있지만 이는 사실이 아닌 것 같습니다. 아무도 이유를 아나요? 내가 놓친 게 있니?
는 SQL Server로 전송
무엇이 많은 매개 변수를 사용하고 있습니까? 대신 테이블 반환 매개 변수 사용을 고려해 보셨습니까? –
2098/2097/etc와 함께 작동합니까? 기본적으로 SQL에있는 ReturnValue 매개 변수가 있다고 생각합니다. –
의도적으로 사용할 수는 없지만 여러 배치로 쿼리를 분할해도 괜찮습니다. 나는 왜 내가 2100 매개 변수를 사용할 수 없는지 알고 싶다. – marcob