2013-12-11 3 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) 

Thanx!

+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

Смежные вопросы

 Смежные вопросы