2011年4月28日木曜日

数値型のデータ変換 - SQL Server 2005

細かいですが、気づきがあったのでメモ。

DBはSQL Server 2005。

ちなみに開発環境はVS2005。

言語はVB.NET。


DBデザインを考えるときに数値型のカラムは今までNumeric型を使用していた。

特に意識して数値型を使い分けている訳ではなかったが、

とりあえず桁数、小数点をそれぞれ任意で指定できるし、桁が大きくなっても問題ない。

特に大規模なシステムなわけではないので、大は小をかねる、発想でこれを使っていた。


今回開発に携わったDBは数値型にINT型を使っている。

そこに今回落とし穴。


例えばNumeric型のカラムに’’(カラ)を挿入しようとすると型変換エラーで落ちちゃいます。

なのでアプリ側の制御として’’はNULLに変換してSQLは流さないといけない。

そこは毎回チェックするところというか、そんなことやるのは当たり前なので。


ところが今回見落としてしまいました。

しかもエラーが出る訳ではない。数値型に’’(カラ)を挿入しているにも関わらず。

最初はデフォルト値を設定しているのかと。

カラを挿入するとデフォルト値を使うようになっているのかと。

まあでもそんなわけでもなく。

確認するとINT型だから?

DecimalとNumericはエラーでこけます。

ところがINT型だと’’(カラ) は 0 として登録しまう。

しかも’’にいくら半角スペースが入っていてもTrimされるのか、問題なし。

とりあえずカラをCASTしてみると下記が0に変換しちゃいます。
bigint、int、smallint、tinyint、float、real、money


これってSQL Server 使う上で常識?

気づかないのはデータ型の本質を理解していないからのような気もするが。

まあとりあえずいまさらですが勉強になりました。

分からないことが多すぎて。

日々精進。

0 件のコメント:

コメントを投稿