Только теперь я получаю эту ошибку при выполнении хранимой процедуры:Ошибка арифметического переполнения преобразования varchar в тип данных числовой?
Arithmetic overflow error converting varchar to data type numeric.
Я нашел строку, в которой эта ошибка была откуда и это код на этой линии:
SELECT @AF_MIN_3L = LEFT(MIN([A-F Est_CY]), 6) - 0.000001 FROM #Ent_AF_3
Ранее в хранимую процедуру, я объявил @ AF_MIN_3L как тип данных FLOAT, создал временную таблицу # Ent_AF_3 и при этом сделал столбец [AF Est_CY] тип данных FLOAT. Является ли следующий код созданием значения, отличного от FLOAT?
LEFT(MIN([A-F Est_CY]), 6) - 0.000001
Я надеюсь, что это простой вопрос, литье и все, что я должен сделать что-то вроде этого:
LEFT(MIN(CAST([A-F Est_CY] AS FLOAT)), 6) - CAST(0.000001 AS FLOAT)
Я не хочу, чтобы запустить всю процедуру снова, не будучи уверенным, что я исправил проблему , Спасибо за любую помощь.
Я думаю, что вам нужно, чтобы бросить его обратно плыть перед вычитанием: 'ВЫБРАТЬ @ AF_MIN_3L = CAST (LEFT (MIN ([AF Est_CY]), 6) AS поплавка) - 0,000001 FROM # Ent_AF_3', но я думаю, это зависит от того, что вы на самом деле хотите достичь. – jpw
Кажется, что ваши операции вышли из строя - не должно быть 'MIN (CAST (LEFT ([A-F Est_CY], 6) AS FLOAT))'? Возьмите левые 6 символов, конвертируйте их в float и найдите минимум? –
Какова ваша цель, например. 'select @ a = -0.00001' приводит к' select @ a'> '-1E-05' и' select LEFT (@a, 6) '>' -1e-00' – bummi