




Я узнал об этом от коллеги, как только разместил это.
Вам необходимо указать точность и масштаб по умолчанию.
Это работает в следующем сценарии: объявить @tempDec decimal (3,2)
Из MSDN:
десятичный [(p [, s])] и числовой [(p [, s])] Фиксированная точность и масштабные числа. При использовании максимальной точности допустимые значения находятся в диапазоне от -10 ^ 38 +1 до 10 ^ 38-1. Синонимами десятичного числа в SQL-92 являются dec и dec (p, s). numeric функционально эквивалентен decimal.
p (точность) Максимальное общее количество десятичных цифр, которое может быть сохранено как слева, так и справа от десятичной точки. Точность должна быть от 1 до максимальной точности 38. Точность по умолчанию - 18.
s (масштаб) Максимальное количество десятичных цифр, которое может храниться справа от десятичной точки. Масштаб должен иметь значение от 0 до p. Масштаб можно указать, только если указана точность. Масштаб по умолчанию - 0; следовательно, 0 <= s <= p. Максимальный размер хранилища зависит от точности.
Это нормально для таких литералов, как 1.0, но если вы извлекаете данные из столбцов таблицы, вам нужно привести / преобразовать первое вычисленное число в вашем уравнении:
convert(decimal, [col1]) / ([col2] + [col3])
-или же-
convert(decimal(15, 2), [col1]) / ([col2] + [col3])
То есть нулевой масштаб в локальной переменной удаляет данные после точки хранения.