SQLServer のカーソルってデフォルトで GLOBAL なのだね

SQLServer 2000, 2005 って、デフォルトだとトランザクションの終了時でもカーソルが閉じないし、スコープを決める CURSOR_DEFAULT は GLOBAL になっているんだねえ。データベース オプションの設定を読んで今日はじめて知った。遅い。イマドキの変数はオプションつけない限り LOCAL になるだろうなんて思いこみは捨てるべきか。もしかしたら Oracle とかも同じかもしれないし。そのうち見てみよう。

もっとも、スコープを LOCAL へ変えたり CURSOR_CLOSE_ON_COMMIT を ON に設定したところでどれだけの違いがあるかは微妙だろうか。でも他のプロシージャやトリガから参照されないとわかりきっているモノなら、変えておく価値はありそうだよね。というか好み。

ちなみに、なぜそんなことを調べたのかというと、カーソルのオープン数が最大を超えてしまうという不具合が発生したからだ。そんなもの超えたことがないので驚いた。

残念ながらカーソルの最大同時オープン数が変わるのかどうかまで調べきれなかったので、先日の不具合が起こらなかったかはわからずじまい。なんで SQLServer って検索してるのに Oracle の情報ばっかり引っかかるんだ Google 先生。

しかし、わたしが作ったプログラムの所為でプロジェクトリーダーが怒られていたのが気にかかった。ちょっと席は離れていたから完全ではないものの、それなりの部分が耳に入ったのだ。こんな程度のモノにトリガなんか使うからこうなるんだ設計が悪い、システム全体のパフォーマンスや機能の優先順位、クライアントの操作性を考えろと言われていたもよう。

気に障る点はいっぱいあるけど言い訳はしない。たいへん申し訳なくて心苦しい。