2017-02-07 4 views
1

У меня есть запрос с таким кодом.Ошибка арифметического переполнения, преобразующая числовое значение в тип данных числовой в sql

set @CurrentPatchDeployPercentage = convert(numeric(5,2), (isnull(@LastMonthDeployCount, 0)* 100.00/isnull(nullif(@TotalMachines, 0), 1))) 

Но когда я бегу, я получаю ниже ошибки, пожалуйста, помогите.

арифметическая ошибка переполнения преобразовывая числовым типом данных числового

+0

числовой (5,2) позволяет 5 Общее количество цифр, 2 дробно смысловые 5 - 2 = 3 всего цифры на левой стороне. Результат вашего расчета превышает 999,99, и ошибка повышается. Увеличьте размер числового() –

+0

Можете ли вы попытаться увеличить числовое число (5,2) до числового (x, y), где x, y относительно выше, чем вы указали – balaji

+3

Возможный дубликат [Почему SQL Server выбрасывает арифметическую ошибку переполнения преобразование int в тип данных число?] (http://stackoverflow.com/questions/2059134/why-sql-server-throws-arithmetic-overflow-error-converting-int-to-data-type-nume) – Tanner

ответ

0

Вы уверены, что, как вы хотите, чтобы получить свой процент? Если вы переместите свой *100.00 после такого разделения?

rextester: http://rextester.com/NNOEH44668

declare @LastMonthDeployCount numeric(7,2) = 10.00; 
declare @TotalMachines numeric (7,2) = 100.00; 

declare @CurrentPatchDeployPercentage numeric(9,2); 
    set @CurrentPatchDeployPercentage = 
     convert(numeric(5,2), 
     (isnull(@LastMonthDeployCount, 0) 
     /
      isnull(nullif(@TotalMachines, 0), 1.0) 
     ) * 100.00 
     ); 

select @CurrentPatchDeployPercentage; 

Кроме того, убедитесь, что ваш @CurrentPatchDeployPercentage тип данных может поддерживать наибольшее количество @LastMonthDeployCount *100.00 когда @TotalMachines = 0 и изменяется на null, а затем изменено на 1.

Decimal/Numeric Data Type - MSDN

Precision Storage bytes 
--------- -------------- 
1 - 9  5 
10-19  9 
20-28  13 
29-38  17