ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Oracle, SQLServer, DB2... etcコミュのSQL Server2000 の暗黙型変換について

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初めまして。
前任者の退社にともない、ある案件の保守を引き継ぐことになったのですが、
SQLserver初心者のため、原因が分からず困っています。


table1というテーブルに、column1というchar型のカラムがあり、
それに対し、下記のSQL文を投げます。

select * from table1 where column1 = 0

クォーテーションでくくられていない時点で、既存バグなのですが、
これまでは、正常に動作していたらしく、
ユーザーさんの方で、SQLserverを英語版に移行したところ、
valueエラーが発生したそうです。


サーバーやODBCの設定によるものなのか、バージョンの違いによるものなのか、
よく分かりません。

ご存知の方がいましたら、よろしくお願い致します。

コメント(4)

>らららさん
ありがとうございます。
返信遅くなって、すみません。。。

正確なバージョン情報を聞いたところ、
SQLServer7.0から2000の英語版にしたということで、
7.0は暗黙変換が行われ、2000は行われないことがわかりました。

そして、照合順なども関わるようですが、
らららさんのおっしゃる通り、
文字列データの有無によっても出たり出なかったりするようです。


本当にありがとうございました。
状況はよく分りませんが、SQLServer2000でも暗黙の型変換はされますよ。
型の違う値を比較した場合には、優先順位の低い方から高い方に変換されて比較されます。
暗黙変換が許されていない型で比較すると確かそれっぽいエラーが出たと思います。
何にせよ、明示的に同じ型にしてあげてから比較を行うのが一番間違いないですけどね。。

CAST と CONVERT
http://msdn.microsoft.com/ja-jp/library/aa226054(SQL.80).aspx
URLがきれちゃってますね。。全体をコピペして確認してください。

ちと補足しときますと、今回は CHAR 型と INT 型を比較してるようなので、優先順位の低い CHAR側をINTに変換してから比較すると思われます。
なので、CHAR側のColumn1に数字以外の文字列が入ってると型変換に失敗してエラーになるんじゃないかと思います。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Oracle, SQLServer, DB2... etc 更新情報

Oracle, SQLServer, DB2... etcのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング