Я пытаюсь отладить хранимую процедуру (не написанную мной), и есть строка, которая вызывает арифметическое переполнение c. Неудачной частью процедуры является просто выбор определенных данных во временную таблицу, чтобы данные могли быть обработаны перед последующей загрузкой в другую таблицу.
Строка, о которой идет речь: select cast(round(po.ReceivedQuantity,2) as decimal(15,2))
. В исходной таблице для этого столбца определено DECIMAL(15,5)
. Последняя таблица, в которую будут загружены данные, имеет этот столбец DECIMAL(15,2)
, следовательно, приведение. Я не писал этот pro c, но новое значение в этом столбце вызывает проблемы.
Мой вопрос: так как SQL сервер автоматически округляет значения в этом столбце при выполнении CAST, есть ли причина использовать функцию ROUND? Будет ли округление значений с помощью этой функции сначала давать другие результаты, чем если бы процедура только что имела CAST(po.ReceivedQuantity AS DECIMAL(15,2)
? Например, если у меня есть значение 48579,75509, будет ли оно округляться по-разному с использованием функции ROUND по сравнению с использованием CAST от (15,5) до (15,2)?
Я прочитал Microsoft делает c на эту тему, но это не дает ответа на мой вопрос.