w into #tt2 where 1=0;
SELECT
ISNULL(MAX(0.0),1.0)
FROM #tt2 T1
Который выдаёт Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric. пока аргумент MAX() находится в диапазоне от -0.9.. до +0.9..
Смотрел ограничения типа numeric - вроде всё ок. Ограничения функции MAX() - тоже ничего криминального не нашёл.
Подскажите, с чем связано? Куда ещё можно глянуть?
Пришли полностью ошибку , весь текст в оригинальном виде.
(затронуто строк: 0) (затронута одна строка) --------------------------------------- Сообщение 8115, уровень 16, состояние 8, строка 3 Ошибка арифметического переполнения при преобразовании numeric к типу данных numeric. Время выполнения: 2022-07-06T18:25:28.5981025+03:00
Чёта бред какой-то...
Вот и я удивился
На досуге попробую воспроизвести у себя...
https://translated.turbopages.org/proxy_u/en-ru.ru.10ada680-62c5ab29-2b84b898-74722d776562/https/stackoverflow.com/questions/4670903/arithmetic-overflow-error-converting-numeric-to-data-type-numeric
зачем ты вообще используешь max без агрегата?
Синтетический пример, которым меня озадачил коллега. Это не реальная задача и в реальной жизни я такое использовать не буду.
В общем, как мне сказали, ответ таков: >> Короче дело раскрыто SELECT SQL_VARIANT_PROPERTY(0.0,'BaseType'), SQL_VARIANT_PROPERTY(0.0,'Precision') , SQL_VARIANT_PROPERTY(0.0,'scale') 0.0 и любое дробное 0.х трактуется как нумерик(1,1), к которому преобразовать любое число с общей длиной больше 1 уже нельзя. Соответственно 1.0 и любое 1.х трактуется уже как нумерик(2,1). << Всем спасибо.
Звучит странно, ты во втором параметре isnull задал такой тип, поэтому он и вернулся при null в первом, задай другой тип-и он вернется
1.0 это numeric(2,1), 0.9 - numeric(1,1) Происходит каст типа у 1.0 к касту типа у 0.9. 1.0 не помещается в тип у 0.9 и, как итог, переполнение
Обсуждают сегодня