共用方式為


SET NUMERIC_ROUNDABORT (Transact-SQL)

指定在運算式中因捨入而造成失去精確度時,所產生的錯誤報告層級。

主題連結圖示Transact-SQL 語法慣例

語法

SET NUMERIC_ROUNDABORT { ON | OFF } 

備註

當 SET NUMERIC_ROUNDABORT 是 ON 時,若在運算式中失去精確度,就會產生一則錯誤。當它是 OFF 時,失去精確度並不會產生錯誤訊息,結果會捨入到用來儲存結果的資料行或變數的精確度。

當嘗試在精確度較低的資料行或變數中儲存固定精確度的值時,會失去精確度。

如果 SET NUMERIC_ROUNDABORT 是 ON,SET ARITHABORT 會判斷所產生錯誤的嚴重性。這份資料表顯示當失去精確度時,這兩項設定所造成的影響。

設定

SET NUMERIC_ROUNDABORT ON

SET 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 (Transact-SQL)>中的「使用 SET 陳述式時的考量」一節。

權限

需要 public 角色中的成員資格。

範例

下列範例會顯示含四位數精確度的兩個值,它們會被加入及儲存在精確度為兩位數的變數中。這些運算式示範不同 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