uhyorinの日記: MSSQLのNumeric型宣言
MSSQLのストアドプロシージャやテーブルレイアウトの型宣言において、
numeric(10, 2)
は固定長の有効桁数と小数点部桁数を持つ数値であり、有効桁数10桁のうち「整数部8桁と小数部2桁」として領域確保される。
初めのうちは「整数部10桁と小数部2桁」と勘違いしていたこともあったような。
あるストアドプロシージャを実行すると、x + y = 一億以上となり整数部8桁では収まらなくなり、
numeric から型 numeric への変換で、算術オーバーフロー エラー。
となって、プロシージャが強制終了され、その後の処理についてはさぁ…という感じだったのが泣けてくる。
帳票出力用の集計だったからよかったものの、更新系のようなバッチ処理だったら目も当てられなかっただろうな…。
というわけで、全てのスプリクトに対し型宣言を更新することに。
numeric型宣言されている項目は、全て有効桁数を13にするということで。
データベーススプリクトを吐き出させて、GREPでnumericをサーチ…いったいどれだけあることやら。
誰が書いたかは知らないが、ストアドによっては有効桁数が10桁だったり11だったり12だったりとまぁ統率性のないことといったら(略)。
…全部手作業でやりました、8時間くらいかけて。
今思えば、「numeric(10, x)」か「numeric (10, x)」のようにnumericと前括弧の間のスペースを考慮して、有効桁が13ではないものを置き換えてテキスト出力するようなスプリクトを書いたほうが早かったか?という気がしないでもない。
Perlや正規表現を理解していればこんなに手間はかかっていなかったのかもしれないと思うと…ふぅ。
MSSQLのNumeric型宣言 More ログイン