共用方式為


SET NUMERIC_ROUNDABORT (Transact-SQL)

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

適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure 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 陳述式時的考量」一節。

若要檢視此設定的目前設定,請執行下列查詢。

DECLARE @NUMERIC_ROUNDABORT VARCHAR(3) = 'OFF';
IF ( (8192 & @@OPTIONS) = 8192 ) SET @NUMERIC_ROUNDABORT = 'ON';
SELECT @NUMERIC_ROUNDABORT AS NUMERIC_ROUNDABORT;

權限

需要 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

請參閱

參考

資料類型 (Transact-SQL)

SET 陳述式 (Transact-SQL)

SET ARITHABORT (Transact-SQL)