状況
MSSQL 2008データベースに接続するためにjTDSを使用する(Tomcat)Java Webアプリケーションがあります。このJavaアプリケーションは、ユーザー入力を使用してMSSQLストアドプロシージャの99%を実行します。
jTDS +ストアドプロシージャ+ prepareSQL =ネストレベルエラー?
問題のjTDSドライバはエラーで(アプリケーション内の別の場所で)時々返信:
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
我々はのjTDS接続文字列にprepareSQL=0
を追加することでこの問題を回避することができます。その後、エラーはどこでも消えますが、他のすべての値がprepareSQL
の場合、エラーはそのまま残ります。 jTDSが追加するストアドプロシージャの入れ子レベルの数はわかりませんが、明らかにアプリケーションにとっては大きすぎます。 、Javaコードでプリペアドステートメントを使用して、もちろん、prepareSQL=3
(またはprepareSQL=0
)が私たちのためにどれだけの影響を
質問実行するための唯一のストアドプロシージャで
がありますか?言い換えれば、すべてのWebサイトで「生産環境で
prepareSQL=0
を使用しないでください」と言われる人は、この状況にも当てはまりますか?prepareSQL=0
が推奨される解決策ではない場合、セキュリティ上の問題など、私たちは別のドライバを探すべきでしょう。 jTDSは過去2年間更新されておらず、MicrosoftにJDBC 4.0用のドライバがあります。私はjTDSとMicrosoftのJDBC 4.0ドライバのベンチマークや比較を見つけることはできません。 Microsoftの2.0および3.0ドライバでは、jTDSがより高速で、より良く、より効率的であるという一般的な意見がありました。それはまだJDBC 4.0の場合ですか?それともMicrosoftは競合他社にこれを渡しましたか?
この動作を特定の手順に正確に示すことはできましたか、それともランダムに見えますか? – heikkim
いいえ、私たちは(まだ)持っていません。アプリケーションの2つの異なる場所でアプリケーションの2つの異なる実装でこのエラーが発生しましたが、発生したときには頑固で、prepareSQL = 0ソリューションを使用することによってのみ解決できました。 – bartlaarhoven