适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统(PDW)
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 中的 SQL 数据库
指定当表达式中的舍入导致精度损失时生成的错误报告级别。
语法
SET NUMERIC_ROUNDABORT { ON | OFF }
备注
当 SET NUMERIC_ROUNDABORT 开启时,表达式中发生精度损失后会产生错误。 如果设置为 OFF,精度的降低不会生成错误消息。 结果会根据存储结果的列或变量的精度进行舍入。
在精度较低的列或变量中,当尝试以固定精度存储值时,会出现精度降低的情况。
如果 SETSET NUMERIC_ROUNDABORT 开启, SET ARITHABORT 则决定生成错误的严重程度。 该表显示当出现精度损失时这两个设置的效果。
| 设置 | SET NUMERIC_ROUNDABORT 关于 | SET NUMERIC_ROUNDABORT 关掉 |
|---|---|---|
| SET SET ARITHABORT 关于 | 生成错误;不返回结果集。 | 没有错误和警告;对结果进行舍入。 |
| SET SET ARITHABORT 关掉 | 返回警告;表达式返回 NULL。 | 没有错误和警告;对结果进行舍入。 |
SET NUMERIC_ROUNDABORT设置是在执行或运行时设置的,而不是在分析时设置的。
SET NUMERIC_ROUNDABORT 在创建或更改计算列或索引视图索引时,必须关闭。 如果 SET NUMERIC_ROUNDABORT 是 ON,则在计算列或索引视图上索引的表上的以下语句失败:
- CREATE
- UPDATE
- INSERT
- DELETE
关于带索引视图和计算列索引的必要 SET 选项设置,请参见 “使用 SET 语句时的注意事项”。
要查看此设置的当前设置,请运行以下查询:
DECLARE @NUMERIC_ROUNDABORT VARCHAR(3) = 'OFF';
IF ( (8192 & @@OPTIONS) = 8192 ) SET @NUMERIC_ROUNDABORT = 'ON';
SELECT @NUMERIC_ROUNDABORT AS NUMERIC_ROUNDABORT;
权限
要求 公共 角色具有成员身份。
示例
以下示例显示精确到四个小数位的两个值。 它们会添加并存储到精确到两个小数位的变量中。 这些表达式演示了不同的 SET NUMERIC_ROUNDABORT 和 SET ARITHABORT 设置所造成的影响。
-- SET NOCOUNT to ON,
-- SET NUMERIC_ROUNDABORT to ON, and SET ARITHABORT to ON.
SET NOCOUNT ON;
PRINT 'SET NUMERIC_ROUNDABORT ON';
PRINT 'SET ARITHABORT ON';
SET NUMERIC_ROUNDABORT ON;
SET ARITHABORT ON;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234 ;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
-- SET NUMERIC_ROUNDABORT to ON and SET ARITHABORT to OFF.
PRINT 'SET NUMERIC_ROUNDABORT ON';
PRINT 'SET ARITHABORT OFF';
SET NUMERIC_ROUNDABORT ON;
SET ARITHABORT OFF;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234 ;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
-- SET NUMERIC_ROUNDABORT to OFF and SET ARITHABORT to ON.
PRINT 'SET NUMERIC_ROUNDABORT OFF';
PRINT 'SET ARITHABORT ON';
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT ON;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234 ;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
-- SET NUMERIC_ROUNDABORT to OFF and SET ARITHABORT to OFF.
PRINT 'SET NUMERIC_ROUNDABORT OFF';
PRINT 'SET ARITHABORT OFF';
SET NUMERIC_ROUNDABORT OFF;
SET ARITHABORT OFF;
GO
DECLARE @result DECIMAL(5, 2),
@value_1 DECIMAL(5, 4),
@value_2 DECIMAL(5, 4);
SET @value_1 = 1.1234;
SET @value_2 = 1.1234;
SELECT @result = @value_1 + @value_2;
SELECT @result;
GO
另请参阅
数据类型 (Transact-SQL)
SET 语句(Transact-SQL)
SET
SET ARITHABORT (Transact-SQL)