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