SET NUMERIC_ROUNDABORT (Transact-SQL)SET NUMERIC_ROUNDABORT (Transact-SQL)

適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse適用対象:Applies to: はいSQL ServerSQL Server (サポートされているすべてのバージョン) yesSQL ServerSQL Server (all supported versions) はいAzure SQL データベースAzure SQL DatabaseYesAzure SQL データベースAzure SQL Database はいAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance はいAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

式の丸め処理で精度が低下するときに作成されるエラー レポートのレベルを指定します。Specifies the level of error reporting generated when rounding in an expression causes a loss of precision.

記事リンク アイコン Transact-SQL 構文表記規則Article link icon Transact-SQL Syntax Conventions

構文Syntax


SET NUMERIC_ROUNDABORT { ON | OFF }

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

解説Remarks

SET NUMERIC_ROUNDABORT が ON の場合には、式の精度が低下するとエラーが生成されます。When SET NUMERIC_ROUNDABORT is ON, an error is generated after a loss of precision occurs in an expression. OFF に設定すると、精度の低下によるエラー メッセージは生成されません。If set to OFF, losses of precision don't generate error messages. 結果は、結果を格納する列または変数の有効桁数に丸められます。The result is rounded to the precision of the column or variable storing the result.

精度の損失は、固定精度の列または精度の低い変数に固定精度を持つ値を格納しようとしたときに発生します。Loss of precision occurs when you attempt to store a value with fixed precision in a column or variable with less precision.

SET NUMERIC_ROUNDABORT が ON の場合、SET ARITHABORT は生成されたエラーの重大度を決定します。If SET NUMERIC_ROUNDABORT is ON, SET ARITHABORT determines the severity of the generated error. 次の表は、精度が低下するときにこの 2 つの設定がどのように影響するかを示しています。This table shows the effects of these two settings when a loss of precision occurs.

設定Setting SET NUMERIC_ROUNDABORT ONSET NUMERIC_ROUNDABORT ON SET NUMERIC_ROUNDABORT OFFSET NUMERIC_ROUNDABORT OFF
SET ARITHABORT ONSET ARITHABORT ON エラーが生成されます。結果セットは返されません。Error is generated; no set of results returned. エラーや警告は返されません。結果は丸められます。No errors or warnings; result is rounded.
SET ARITHABORT OFFSET ARITHABORT OFF 警告が返されます。式は NULL を返します。Warning is returned; expression returns NULL. エラーや警告は返されません。結果は丸められます。No errors or warnings; result is rounded.

NUMERIC_ROUNDABORT は、解析時ではなく実行時に設定されます。The setting of SET NUMERIC_ROUNDABORT is set at execute or run time and not at parse time.

計算列やインデックス付きビューのインデックスを作成または変更するときには、SET NUMERIC_ROUNDABORT を OFF に設定する必要があります。SET NUMERIC_ROUNDABORT must be OFF when you're creating or changing indexes on computed columns or indexed views. SET NUMERIC_ROUNDABORT が ON の場合、計算列やインデックス付きビューのインデックスが設定されているテーブルに対する次の各ステートメントは失敗します。If SET NUMERIC_ROUNDABORT is ON, the following statements on tables with indexes on computed columns or indexed views fail:

  • CREATECREATE
  • UPDATEUPDATE
  • INSERTINSERT
  • DELETEDELETE

インデックス付きビューおよび計算列上のインデックスに必要な SET オプション設定の詳細については、「SET ステートメントの使用に関する留意事項」を参照してください。For more information about required SET option settings with indexed views and indexes on computed columns, see Considerations When You Use the SET Statements.

この設定の現在の設定を表示するには、次のクエリを実行します。To view the current setting for this setting, run the following query:

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

アクセス許可Permissions

ロール public のメンバーシップが必要です。Requires membership in the public role.

Examples

次の例では、小数点以下 4 桁の精度を持つ 2 つの値を示します。The following example shows two values that are precise to four decimal places. それらは加算され、小数点以下 2 桁の精度の変数に格納されます。They get added and stored in a variable that is precise to two decimal places. この式は、SET NUMERIC_ROUNDABORTSET ARITHABORT の 2 つの設定の結果を示します。The expressions demonstrate the effects of the different SET NUMERIC_ROUNDABORT and SET ARITHABORT settings.

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

参照See Also

データ型 (Transact-SQL) Data Types (Transact-SQL)
SET ステートメント (Transact-SQL) SET Statements (Transact-SQL)
SET ARITHABORT (Transact-SQL)SET ARITHABORT (Transact-SQL)