Почему SQL Server выдает ошибку арифметического переполнения при использовании ROUND? - PullRequest
0 голосов
/ 18 мая 2018

Почему что-то простое, например

SELECT ROUND(0.99535, 2)

, возвращает ошибку арифметического переполнения в SQL SERVER 2008 R2?

1 Ответ

0 голосов
/ 18 мая 2018

Окончательный тип данных DECIMAL(5,5), поэтому нет места для значения 1.0.

SELECT ROUND(0.99535, 2) 
-- it would round to 1.0000 but it is to big for DECIMAL(5,5)
<=>
SELECT CAST(1 AS numeric(5,5))
-- Arithmetic overflow error converting int to data type numeric.

Проверка метаданных:

SELECT name, system_type_name
FROM sys.dm_exec_describe_first_result_set  
(N'SELECT ROUND(0.99535, 2) AS result', null, 0) ;  
-- name     system_type_name
-- RESULT   numeric(5,5)

DBFiddle Demo


Чтобы избежать этой проблемы, вы можете изменить точность на 6.

SELECT ROUND(CONVERT(NUMERIC(6,5), 0.99535),2)

DBFiddle Demo 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...