
「varchar の値 11111111111111 の変換が int 型の列でオーバーフローしました。」というメッセージができて困っている。
こうした疑問を解決します。
先日、業務でSQL Server Management Studio (SSMS)を利用していたところ、こんなエラーが発生しました。
SELECT * FROM A WHERE "ID" = 11111111111111
を実行してみたところ
varchar の値 11111111111111 の変換が int 型の列でオーバーフローしました。
と。

何なんだこれは!!!SELECT文のどこがおかしいんだよ!!!
この問題を解決するために僕がしたことを書きます。
SQLのオーバーフローを解決するために試したこと
①全件検索
SELECT * FROM A
を実行してみたところ、
varchar の値 ‘11111111111111’ の変換が int 型の列でオーバーフローしました。
というメッセージは表示されずにデータを抽出することができました。

もちろん、これではデータが絞れないのでよろしくないのですが。。。
②小さな数字を条件にしてみる
SELECT * FROM A WHERE "ID" = 11
WHERE句で指定する条件の桁数を小さくしてあげると、特にエラーは発生せずにクエリが完了しました。
③テーブルの確認

テーブルで指定している桁数の上限を超えているのかな、、、
とも思いましたが、データをテーブルに入れることはできています。
この問題を解決した方法
条件指定する数字を’ ‘で囲ってあげる
です。
具体的には
SELECT * FROM A WHERE "ID" = '11111111111111'
としてあげることで無事に
varchar の値 11111111111111 の変換が int 型の列でオーバーフローしました。
というエラーを出さずにクエリを完了させることができました!
皆さんも、SQLで「テーブルにデータを格納することはできているのにSELECT文で取り出そうとするとオーバーフローする!」という症状に悩んでいるときは、オーバーフローしてしまっている値に対して「’ ‘」をつけてみてはいかがでしょうか?
今回は以上です。
コメント