2013-12-11 2 views
0

varchar를 데이터 유형 숫자로 변환하는 산술 오버플로 오류가 발생합니다. 내 저장된 절차 때만하지만 계산을해야합니다. 여기에 내 코드가있다, 나는 아직도 잘못 된 것으로 보이는 변환을 사용하고있다.varchar를 저장 프로 시저의 데이터 유형 숫자로 변환하는 산술 오버플로 오류

set @Text = @Text + 'Something:' + 
(select case when s.ATF = '' then '0' 
else Convert(varchar,100 *((s.ATF *1.00)/ 
(s.Total * 1.00))) + '%' 
end 
from Maintenance.dbo.stats s 
where s.ID = @ID) + CHAR(13) + CHAR(10) 

고맙습니다.

+0

. 내 생각 엔 : s.ID는 varchar이고 @ID는 숫자입니다. – adrianm

+0

실제로 @ID 변수는 varchar로 선언됩니다. 올바른 결과를 얻을 수없는 것처럼 '0'을 반환하는 경우에 작동합니다. – SterlinkArcher

+0

@andrejcurcic's.ATF'의 데이터 유형은 무엇입니까? –

답변

1

문제는 varchar을 숫자 값으로 곱하는 것입니다. 이는 숫자 형식으로의 암시적인 변환을 강제합니다. 명시 적으로 변환을 지정해야합니다. 나는 decimal(38,6)을 선택했으나 변경할 수 있습니다.

set @Text = @Text + 'Something:' + 
(select case when s.ATF = '' then '0' 
else Convert(varchar, 100 * cast(s.ATF as decimal(38,6))/ 
cast(s.Total as decimal(38,6))) + '%' 
end 
from Maintenance.dbo.stats s 
where s.ID = @ID) + CHAR(13) + CHAR(10) 

이 잘못 변환하는 간단한 예에서 작동되는 방식을 볼 수 있습니다 당신은 필드와 매개 변수의 유형을 제공해야

declare @x as varchar(50) = '11' 
select @x * 1.00 
+0

죄송합니다.'1.00'을 한 개 더 삭제하는 것을 잊어 버렸습니다. 지금 업데이트하십시오. – Szymon

+1

대단히 감사합니다! 이것은 나를 위해 그것을 해결 :) – SterlinkArcher

관련 문제