読者です 読者をやめる 読者になる 読者になる

PreparedStatementのバインド変数の制限?

S2DaoからSQL Serverに対してクエリを実行した際に↓のような例外が発生しました。

com.microsoft.sqlserver.jdbc.SQLServerException: 着信の表形式のデータ ストリーム (TDS) リモート プロシージャ コール (RPC) プロトコル ストリームが不適切です。この RPC 要求に指定されたパラメータが多すぎます。最大数は 2100 です。

調査したところ、S2DaoSQL文でIN句を使っていたところで、バインド変数として渡した配列のサイズが大きすぎたようです。

-- こんな感じにしていたらnamesが3000件とかだった。。
WHERE name IN /*names*/('aaa', 'bbb')

小分けにしてデータを取得してみたところエラーは発生しませんでした。
そもそもIN句のバインド引数が3000件というところに問題があるのかもしれませんが。。