본문 바로가기

DBMS/SQL Server

[SQL Server] 산술 오버플로 오류

 

expression을(를) 데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.

 

int형의 범위를 초과하여 발생한 경우로 더 큰 데이터 형식(bigint)으로 변환하면 문제가 해결된다.

 

 -- INT형 컬럼을 가진 테이블 생성

 CREATE TABLE TEST (

    COL1 INT NOT NULL IDENTITY(1,1)

  , COL2 INT

 )

 

 

 -- 데이터 삽입(두 값을 SUM 하였을 경우 INT형의 범위를 초과하게 삽입)

 INSERT INTO TEST VALUES ('2000000000'), ('2000000000')

 

 

 -- 두 값을 SUM 하였을 경우 산술 오버플로 오류 확인

 SELECT SUM(COL2) FROM TEST

 

 

 -- CONVERTCASTINT형을 BIGINT형으로 변환

 SELECT SUM(CONVERT(BIGINT, COL2)) FROM TEST

 SELECT SUM(CAST(COL2 AS BIGINT)) FROM TEST

 

 

 

데이터 형식에 따른 범위

 

  bigint

-2^63(-9,223,372,036,854,775,808) ~ 2^63-1(9,223,372,036,854,775,807)   8바이트

 

  int

-2^31(-2,147,483,648) ~ 2^31-1(2,147,483,647)   4바이트

 

  smallint

-2^15(-32,768) ~ 2^15-1(32,767)   2바이트

 

  tinyint

0 ~ 255   1바이트