ARITHABORT の設定
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'GORECONFIGURE WITH OVERRIDEGO |
データベースレベル
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.databasesWHERE name = 'database_name' |
SELECT DATABASEPROPERTYEX('database_name', 'IsArithmeticAbortEnabled') AS ARITHABORT |
参考情報: DATABASEPROPERTYEX (Transact-SQL) sys.databases (Transact-SQL)
動作検証用サンプル
サンプルとして、データベースレベルで設定変更する場合のスクリプトです。
サンプルスクリプト
-- drop database arithaborttest-- gocreate database arithaborttestgoset ansi_warnings offgouse arithaborttestgoalter database arithaborttest set arithabort ongoselect 1/0goalter database arithaborttest set arithabort offgoselect 1/0go |
SQLCMD での実行例
C:\Tools>sqlcmd -E –Sserver011> drop database arithaborttest2> go1> create database arithaborttest2> go1> set ansi_warnings off2> go1> use arithaborttest2> goデータベース コンテキストが 'arithaborttest' に変更されました。1> alter database arithaborttest set arithabort on2> go1> select 1/02> goメッセージ 8134、レベル 16、状態 1、サーバー server01、行 10 除算エラーが発生しました。1> alter database arithaborttest set arithabort off2> go1> select 1/02> go-----------NULL(1 行処理されました) |