• 相关软件
    >SET NUMERIC_ROUNDABORT 创建者:webmaster 更新时间:2006-02-16 15:51

    指定当表达式中的四舍五入导致精度损失时生成的错误报告级别。



    语法


    SET NUMERIC_ROUNDABORT { ON | OFF }



    注释


    当 SET NUMERIC_ROUNDABORT 为 ON 时,当表达式中出现精度损失时生成错误。当设置为 OFF 时,精度损失不生成错误信息,并且将结果四舍五入为存储结果的列或变量的精度。



    在精度较低的列或变量中,当试图以固定精度存储一个值时,将出现精度损失。



    如果 SET NUMERIC_ROUNDABORT 为 ON,则 SET ARITHABORT 决定生成错误的严重度。下表显示当出现精度损失时这两个设置的效果。
























    设置
    SET NUMERIC_ROUNDABORT ONSET NUMERIC_ROUNDABORT OFF
    SET ARITHABORT ON生成错误;不返回结果集。没有错误和警告;将结果四舍五入。
    SET ARITHABORT OFF返回警告;表达式返回 NULL。没有错误和警告;将结果四舍五入。



    SET NUMERIC_ROUNDABORT 的设置是在执行或运行时设置,而不是在分析时设置。



    当在计算列或索引视图上创建或操作索引时,SET NUMERIC_ROUNDABORT 必须为 OFF。如果 SET NUMERIC_ROUNDABORT 为 ON,则计算列或索引视图上带索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 语句将失败。有关计算列上的索引视图和索引所必需的 SET 选项设置的更多信息,请参见 SET 中的"使用 SET 语句时的注意事项"。



    权限


    SET 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
    相关文章
    本页查看次数: