SQL Разница округления сервера между CAST и ROUND - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь отладить хранимую процедуру (не написанную мной), и есть строка, которая вызывает арифметическое переполнение 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 на эту тему, но это не дает ответа на мой вопрос.

...