Ошибка: Ошибка арифметического переполнения при преобразовании чисел в тип данных varchar - PullRequest
10 голосов
/ 21 декабря 2011

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

Получение ошибки в этой строке, почему и что следует изменить?

CONVERT(VARCHAR(8),CONVERT(DECIMAL(8,4),((CurrentLoans.Price - PreviousLoans.Price) / PreviousLoans.Price) * 100)) 

Ответы [ 2 ]

31 голосов
/ 21 декабря 2011

Вот как минимум одна проблема:

CONVERT(VARCHAR(8),CONVERT(DECIMAL(8,4))

Decimal(8,4) обозначает 8 цифр, 4 справа от десятичной дроби.Это НЕ учитывает фактический десятичный символ, поэтому у вас потенциально может быть значение вроде:

1234.5678

, которое является действительным Decimal(8,4), но не будетвписывается в varchar(8).

1 голос
/ 18 мая 2015

Я знаю, что это старый пост, но я просто хотел сказать спасибо. У меня возникла именно эта проблема, и что больше всего раздражало, так это то, что она выдавала ошибку при выборе из VIEW, но не выдавала ошибку, когда я использовала оператор выбора из VIEW, вставила его и вставила в TEMP TABLE !!

пример:

select * from dvView --worked
select * from dvView where product = '5' --Broke!
--BUT
select * from #Temp_table_dvView --worked!
select * from #Temp_table_dvView where product = '5' --worked!

В итоге мне пришлось изменить деталь в представлении с

select cast(productNumber as nvarchar(1), etc...

до

select cast(productNumber as nvarchar(2), etc...

и это сработало.

но странно, что я получил ошибку

Arithmetic overflow error converting numeric to data type varchar.

вместо того, что читает

Data would be truncated

или что угодно ...

пища для размышлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...