SET ARITHIGNORE (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

SET ARITHIGNORE設定は、クエリが算術オーバーフローエラーを返すか、ゼロ除算エラーを返すかを制御します。 SET ARITHIGNORE ON設定では「ゼロでの割り算が発生しました。」や「算術オーバーフローが発生しました」というメッセージが検出されません。

Transact-SQL 構文表記規則

構文

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 ARITHABORTSET ANSI_WARNINGSの両方がOFFで算術エラーが発生した場合、SET ARITHIGNOREOFFされると警告メッセージが表示され、算術演算の結果がNULLされます。
  • SET ARITHABORTSET ANSI_WARNINGSの両方がOFFで算術エラーが発生した場合、SET ARITHIGNOREONされていても警告メッセージは表示されず、算術演算の結果はNULLされます。

ARITHIGNORE設定はクエリがエラーメッセージを返すかどうかのみを制御します。 SQL データベース エンジンは、オーバーフローやゼロ除算エラーを含む計算で、この設定に関わらずNULLを返します。 この設定は、 INSERTUPDATEDELETE 文中に発生するエラーには影響しません。

SET ARITHABORTまたはSET ARITHIGNOREのいずれかがOFFSET ANSI_WARNINGSONであっても、除算やオーバーフローエラーに遭遇した際にクエリはエラーメッセージを返します。 ANSI_WARNINGSON(デフォルト)の場合、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)

以下の例はゼロ除算法とオーバーフロー誤差を示しています。 この例では、 ARITHIGNOREOFFするためエラーメッセージは返されません。

-- SET ARITHIGNORE OFF and testing.  
SET ARITHIGNORE OFF;  
SELECT 1 / 0 AS DivideByZero;  
SELECT CAST(256 AS TINYINT) AS Overflow;