2100パラメータの制限に達したときに、1つのSqlCommandで異なるクエリをバッチしてクエリのバッチを停止しています。私のバッチに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.
は例外メッセージと、ここで文書を検討している場合でも、「あまりにも多くのパラメータ例外」をスローし
1つのクエリに2100のパラメータがありますが、これは真実ではないようです。なぜ誰が知っていますか?何か不足していますか?
は、SQL Serverに送信
この数多くのパラメータをどのように使用していますか?代わりにテーブル値のパラメータを使用することを検討しましたか? –
2098/2097 /などで動作しますか?私は、SQLがデフォルトで持つReturnValueパラメータがあると思います。 –
私は設計でそれを使用することはできません、私は複数のバッチでクエリを分割しても問題ありません。私はそれが言うように2100パラメータを使用できない理由を知りたがっています。 – marcob