LoginSignup
8
3

More than 5 years have passed since last update.

SQL Server 8115: 「expression をデータ型 int に変換中に、算術オーバーフロー エラーが発生しました。」の傾向と対策

Posted at

この記事は昔書いた記事をブログから移行したものです。

表題のエラーで悩んだので悩んだ過程をメモしておきます。

この問題の原因は、

  • SQL Server(だけに限らず他のRDBMSでも)では、暗黙の型変換が行われる
  • 演算を行う場合、最大精度の型に合わせて演算が行われる

という特徴です。つまり、このエラーが発生する最も簡単なSQLは以下のようになります。

SELECT 46340 * 46340; -- OK!
SELECT 46341 * 46341; -- Error

これは、46341がintと解釈され、intとintの演算結果がintの範囲(-2,147,483,648~2,147,483,647)に収まりきらないためエラーになります。SQL Serverには明示的な型変換のためのCAST関数が用意されていて、

SELECT CAST(46341 AS BIGINT) * 46341; -- OK!

とすることで、bigintとintの演算となり、結果は最大精度のbigintになるためエラーになりません。また、

SELECT CAST(46341 * 46341 AS BIGINT); -- Error

のような書き方もエラーです。これも最初の特徴にあてはめて考えると、intとintの演算を先にしてしまうのでエラーになるのは自明ですね。。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3