適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric の SQL 分析エンドポイント
Microsoft Fabric のウェアハウス
Microsoft Fabric の SQL データベース
SET ARITHIGNORE設定は、クエリが算術オーバーフローエラーを返すか、ゼロ除算エラーを返すかを制御します。
SET ARITHIGNORE ON設定では「ゼロでの割り算が発生しました。」や「算術オーバーフローが発生しました」というメッセージが検出されません。
構文
SQL Server、Azure SQL Database、Microsoft Fabric Data Warehouse、SQLデータベースの構文論Microsoft Fabric
SET ARITHIGNORE { ON | OFF }
Azure Synapse Analytics および Analytics Platform System (PDW) の構文
SET ARITHIGNORE OFF
解説
-
SET ARITHABORTとSET ANSI_WARNINGSの両方がOFFで算術エラーが発生した場合、SET ARITHIGNOREがOFFされると警告メッセージが表示され、算術演算の結果がNULLされます。 -
SET ARITHABORTとSET ANSI_WARNINGSの両方がOFFで算術エラーが発生した場合、SET ARITHIGNOREがONされていても警告メッセージは表示されず、算術演算の結果はNULLされます。
ARITHIGNORE設定はクエリがエラーメッセージを返すかどうかのみを制御します。 SQL データベース エンジンは、オーバーフローやゼロ除算エラーを含む計算で、この設定に関わらずNULLを返します。 この設定は、 INSERT、 UPDATE、 DELETE 文中に発生するエラーには影響しません。
SET ARITHABORTまたはSET ARITHIGNOREのいずれかがOFFでSET ANSI_WARNINGSがONであっても、除算やオーバーフローエラーに遭遇した際にクエリはエラーメッセージを返します。
ANSI_WARNINGSがON(デフォルト)の場合、ARITHABORTの設定は機能的な影響を持ちません。
SET ARITHIGNOREの設定は、解析時ではなく実行時に設定されます。
この構文は、Azure Synapse Analytics のサーバーレス SQL プールでサポートされていません。
現在の設定を見る ARITHIGNORE
ARITHIGNOREの現在の設定を見るには、以下のT-SQLクエリを実行します。
DECLARE @ARITHIGNORE VARCHAR(3) = 'OFF';
IF ( (128 & @@OPTIONS) = 128 ) SET @ARITHIGNORE = 'ON';
SELECT @ARITHIGNORE AS ARITHIGNORE;
アクセス許可
ロール public のメンバーシップが必要です。
例
以下の例は、両タイプのクエリエラー(除算オーバーフロー)の両方で SET ARITHIGNORE 設定を用いる例を示しています。
SET ARITHABORT OFF;
SET ANSI_WARNINGS OFF
GO
PRINT 'Setting ARITHIGNORE ON';
GO
-- SET ARITHIGNORE ON and testing.
SET ARITHIGNORE ON;
GO
SELECT 1 / 0 AS DivideByZero;
GO
SELECT CAST(256 AS TINYINT) AS Overflow;
GO
PRINT 'Setting ARITHIGNORE OFF';
GO
-- SET ARITHIGNORE OFF and testing.
SET ARITHIGNORE OFF;
GO
SELECT 1 / 0 AS DivideByZero;
GO
SELECT CAST(256 AS TINYINT) AS Overflow;
GO
例: Azure Synapse Analytics、Analytics Platform System (PDW)
以下の例はゼロ除算法とオーバーフロー誤差を示しています。 この例では、 ARITHIGNORE が OFFするためエラーメッセージは返されません。
-- SET ARITHIGNORE OFF and testing.
SET ARITHIGNORE OFF;
SELECT 1 / 0 AS DivideByZero;
SELECT CAST(256 AS TINYINT) AS Overflow;