Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


2008年09月08日

SQLサーバで

SQLサーバで開発するにあたって、最近あらためて注意が必要だと感じた何点かを挙げておこうと思います。

・文字列にNULLを連結するとNULLになります。
 SQLサーバではNULL値に対しての処理結果は基本的にNULLが返ります。動的SQL文作成のために文字列連結をする場合は、NULL値になる可能性のある変数の扱いに注意しましょう。NULL値を連結してNULLになった文字列を実行(EXEC)してもエラーは発生しません。正常終了するためミスに気付きにくいのでご注意を。

・一時テーブルのデータベース名、スキーマ名(所有者名)は無視されます。
 ローカル一時テーブル(テーブル名の先頭が#のテーブル)、グルーバル一時テーブル(テーブル名の先頭が##のテーブル)ともに、tempdb に作成され、データベース名、スキーマ名の指定は無視されてしまいます。存在しないデータベース名を指定したとしても実行エラーになりません。したがって、コードを書く際は誤解を避けるために、一時テーブルのデータベース名、スキーマ名は書かない方が良いでしょう。

・cast('2008/10/1' as datetime) = cast('2008/9/30 23:59:59.999' as datetime) です。
 日付型のミリ秒の精度1000分の1秒ではないため、このようなことになります。定数と時刻を比較する場合はご注意を。(詳細は2007年06月15日の記事を参照ください)

・10 / 3 = 10 / 3.0 ではありません。
 演算においては精度の高い方に合わせて実行されます。3ですとint型ですが、3.0と小数点を付けるとreal型とみなされます。定数を使用する場合は cast(3 as decimal(10,3))のように、型変換を明示すべきでしょう。
[ posted by hori ]

この記事に対するコメント


この記事に対するコメントの投稿














管理者にだけ表示を許可する



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/388-2ab71109
この記事にトラックバックする(FC2ブログユーザー)











上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。