指定當表達式中的四舍五入導致精度損失時生成的錯誤報告級別。
SET NUMERIC_ROUNDABORT { ON | OFF }
當 SET NUMERIC_ROUNDABORT 為 ON 時,當表達式中出現(xiàn)精度損失時生成錯誤。當設置為 OFF 時,精度損失不生成錯誤信息,并且將結(jié)果四舍五入為存儲結(jié)果的列或變量的精度。
在精度較低的列或變量中,當試圖以固定精度存儲一個值時,將出現(xiàn)精度損失。
如果 SET NUMERIC_ROUNDABORT 為 ON,則 SET ARITHABORT 決定生成錯誤的嚴重度。下表顯示當出現(xiàn)精度損失時這兩個設置的效果。
設置 | SET NUMERIC_ROUNDABORT ON | SET NUMERIC_ROUNDABORT OFF |
---|---|---|
SET ARITHABORT ON | 生成錯誤;不返回結(jié)果集。 | 沒有錯誤和警告;將結(jié)果四舍五入。 |
SET ARITHABORT OFF | 返回警告;表達式返回 NULL。 | 沒有錯誤和警告;將結(jié)果四舍五入。 |
SET NUMERIC_ROUNDABORT 的設置是在執(zhí)行或運行時設置,而不是在分析時設置。
當在計算列或索引視圖上創(chuàng)建或操作索引時,SET NUMERIC_ROUNDABORT 必須為 OFF。如果 SET NUMERIC_ROUNDABORT 為 ON,則計算列或索引視圖上帶索引的表上的 CREATE、UPDATE、INSERT 和 DELETE 語句將失敗。有關(guān)計算列上的索引視圖和索引所必需的 SET 選項設置的更多信息,請參見 SET 中的"使用 SET 語句時的注意事項"。
SET NUMERIC_ROUNDABORT 權(quán)限默認授予所有用戶。
下例顯示將兩個精度為四位小數(shù)的值添加和存儲在一個精度為兩位小數(shù)的變量中。下列表達式演示不同的 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
相關(guān)文章