ARITHABORT の設定について、既定値や変更方法、設定の確認方法をご紹介します。
ARITHABORT の詳細は、SET ARITHABORT (Transact-SQL) を参照ください。
※内容は、2018 年1月 現在の情報となります。本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。
既定値
アプリケーションによって、セッションの既定値が異なります。主なアプリケーションとして、Management Studio と SQLCMDでは違いがあります。
アプリケーション |
既定値 |
動作 |
Management Studio | ON | クエリ実行中にオーバーフローまたは 0 除算のエラーが発生した場合に、クエリを終了させる |
SQLCMD | OFF | クエリ実行中にオーバーフローまたは 0 除算のエラーが発生した場合に、クエリを終了させず、続行する |
変更方法
サーバーレベル、データベースレベル、セッションレベルでの変更が可能です。
サーバーレベル
EXEC sys.sp_configure N'user options', N'64' GO RECONFIGURE WITH OVERRIDE GO |
データベースレベル
ALTER DATABASE database_name SET ARITHABORT ON |
セッションレベル
SET ARITHABORT ON |
設定値の確認方法
サーバーレベル、セッションレベルで設定した内容は、次のクエリで確認可能です。
DECLARE @ARITHABORT VARCHAR(3) = 'OFF'; IF ( (64 & @@OPTIONS) = 64 ) SET @ARITHABORT = 'ON'; SELECT @ARITHABORT AS ARITHABORT; |
参考情報: SET ARITHABORT (Transact-SQL)
データベースレベルで設定した内容は、次のいずれかのクエリで確認可能です。
SELECT name, is_arithabort_on FROM sys.databases WHERE name = 'database_name' |
SELECT DATABASEPROPERTYEX('database_name', 'IsArithmeticAbortEnabled') AS ARITHABORT |
参考情報: DATABASEPROPERTYEX (Transact-SQL) sys.databases (Transact-SQL)
動作検証用サンプル
サンプルとして、データベースレベルで設定変更する場合のスクリプトです。
サンプルスクリプト
-- drop database arithaborttest -- go create database arithaborttest go set ansi_warnings off go use arithaborttest go alter database arithaborttest set arithabort on go select 1/0 go alter database arithaborttest set arithabort off go select 1/0 go |
SQLCMD での実行例
C:\Tools>sqlcmd -E –Sserver01 1> drop database arithaborttest 2> go 1> create database arithaborttest 2> go 1> set ansi_warnings off 2> go 1> use arithaborttest 2> go データベース コンテキストが 'arithaborttest' に変更されました。 1> alter database arithaborttest set arithabort on 2> go 1> select 1/0 2> go メッセージ 8134、レベル 16、状態 1、サーバー server01、行 1 0 除算エラーが発生しました。 1> alter database arithaborttest set arithabort off 2> go 1> select 1/0 2> go----------- NULL(1 行処理されました) |