2016-08-10 2 views
0

어떻게 두 변수의 차이점을 찾을 수 있습니까?메시지 232, 수준 16, 상태 3, 줄 5 int 형식의 산술 오버플로 오류

error is Msg 232, Level 16, State 3, Line 5 
Arithmetic overflow error for type int, value = -39827814763.955299. 

Msg 232, Level 16, State 3, Line 12 
Arithmetic overflow error for type int, value = -39827814763.950142. 

쿼리는 .. 아래 TIA

declare @sql int 
declare @sql1 int 
declare @sql3 int 

set @sql = (select sum(sfg.amount) as VM_Amount_LCY 
    from Setup_Company sc inner join stg_dim_dimension02 sdd on 
sdd.company_id = sc.company_id inner join stg_fact_dimension_set_entry fdse on fdse.dim02_sk = sdd.dimension_id and fdse.company_id=sdd.company_id 
inner join stg_fact_gl sfg on sfg.[dimension set id] = fdse.[Dimension Set ID] and sfg.company_id= fdse.company_id) 



set @sql1 = (select sum(sfg.amount) as BI_Amount_LCY from [NORRIQ Drink-IT BI 2013 India].dbo.Setup_Company sc inner join [NORRIQ Drink-IT BI 2013 India].dbo.dim_dimension02 sdd on 
sdd.company_id = sc.company_id inner join [NORRIQ Drink-IT BI 2013 India].dbo.fact_dimension_set_entry fdse on fdse.dim02_sk = sdd.dimension_id and fdse.company_id=sdd.company_id 
inner join [NORRIQ Drink-IT BI 2013 India].dbo.fact_gl sfg on sfg.[dimension set id] = fdse.[Dimension Set ID] 
and sfg.company_id= fdse.company_id) 


select @sql3 = (-(@sql) - (-(@sql1))) 
+0

int가 너무 작습니다. 대용량 (또는 큰 정수가 필요한 경우 bigint)을 대신 사용하십시오. –

답변

1
-39827814763.955299 

위의 값은 소수이고 당신이 그것을 아래 범위에서 번호를 저장할 수있는 INT.INT를 저장하기 위해 노력하고있다 ..입니다

-2,147,483,648 to 2,147,483,647 

아리 테마 범람을 극복하기 위해 BIGINT를 사용할 수 있습니다.

declare @sql BIGINT 
declare @sql1 BIGINT 
declare @sql3 BIGINT 

하지만, 정밀도를 원하는 아래와 같이 숫자를 사용하는 경우는, 정밀도를 잃어 가고있다 위의 데이터 유형.. SUM에서 표현의

declare @sql numeric(22,6) 
0

유형은 경우 sfg.amount에 반환 유형을 결정합니다. 다음과 같이 SUM을 수행하기 전에 예를 들어 BIGINT로 변환 할 수 있습니다.

SELECT SUM(CAST(sfg.amount AS BIGINT)) .... 
관련 문제