分享方式:


SET NUMERIC_ROUNDABORT (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

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

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
  • 刪除

如需含索引檢視表和計算資料行索引的必要 SET 選項設定詳細資訊,請參閱使用 SET 陳述式時的考量

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

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

權限

需要 public 角色的成員資格。

範例

下列範例顯示會精確到四個小數位數的兩個值。 它們會新增和儲存在精確到兩個小數位數的變數中。 這些運算式示範不同 SET NUMERIC_ROUNDABORTSET 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)