SET NUMERIC_ROUNDABORT (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
指定在運算式中因捨入而造成失去精確度時,所產生的錯誤報告層級。
語法
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_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)