首页 > 解决方案 > 在 SQL Server 中将小数转换为 int 会使结果列可以为空?

问题描述

我有时使用sp_describe_first_result_set从选择查询生成类型定义,今天我注意到将 adecimal转换为 anint会使结果列可以为空(至少根据 的输出sp_describe_first_result_set)。我很感兴趣,因为我在转换文档十进制文档中找不到关于未能将小数转换为整数而不是溢出和截断的任何内容,并且我希望实际失败会引发错误而不仅仅是返回 null。但也许我忽略了一些东西?

这是一个简单的复制案例。

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 位)14.0.3049.1

标签: sql-server

解决方案


推荐阅读