Иногда я использую sp_describe_first_result_set
для генерации определений типов из запросов на выборку, и сегодня я заметил, что приведение decimal
к int
делает получаемый столбец обнуляемым (по крайней мере, в соответствии с выводомsp_describe_first_result_set
). Мне интересно, потому что я не смог найти ничего в конвертируемых документах или десятичных документах о невозможности конвертировать десятичные числа в целые, кроме переполнения и усечения, и я ожидалфактическая ошибка, чтобы вызвать ошибку, а не просто вернуть ноль. Но, может быть, я что-то упустил?
Вот простой случай воспроизведения.
CREATE TABLE #test_case (
dval DECIMAL(9, 0) NOT NULL
);
EXEC sp_describe_first_result_set N'
SELECT
dval,
CAST(dval AS INT) AS dval_cast
FROM #test_case;
', null, 0;
-- Output:
-- name is_nullable system_type_name
-- ---- ----------- ----------------
-- dval 0 decimal(9,0)
-- dval_cast 1 int
Мы используем Microsoft SQL Server Standard (64-bit) 14.0.3049.1