SET NUMERIC_ROUNDABORT (Transact-SQL)SET NUMERIC_ROUNDABORT (Transact-SQL)
適用対象:Applies to: SQL ServerSQL Server (サポートされているすべてのバージョン)
SQL ServerSQL Server (all supported versions)
Azure SQL データベースAzure SQL Database
Azure SQL データベースAzure SQL Database
Azure SQL Managed InstanceAzure SQL Managed Instance
Azure SQL Managed InstanceAzure SQL Managed Instance
Azure Synapse AnalyticsAzure Synapse Analytics
Azure Synapse AnalyticsAzure Synapse Analytics
Parallel Data WarehouseParallel Data Warehouse
Parallel Data WarehouseParallel Data Warehouse
SQL ServerSQL Server (サポートされているすべてのバージョン)
SQL ServerSQL Server (all supported versions)
Azure SQL データベースAzure SQL Database
Azure SQL データベースAzure SQL Database
Azure SQL Managed InstanceAzure SQL Managed Instance
Azure SQL Managed InstanceAzure SQL Managed Instance
Azure Synapse AnalyticsAzure Synapse Analytics
Azure Synapse AnalyticsAzure Synapse Analytics
Parallel Data WarehouseParallel Data Warehouse
Parallel Data WarehouseParallel Data Warehouse
式の丸め処理で精度が低下するときに作成されるエラー レポートのレベルを指定します。Specifies the level of error reporting generated when rounding in an expression causes a loss of precision.
Transact-SQL 構文表記規則
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_ROUNDABORT
と SET 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)