SET XACT_ABORT (Transact-SQL)SET XACT_ABORT (Transact-SQL)

適用対象: ○SQL Server (2008 以降) ○Azure SQL Database ○Azure SQL Data Warehouse ○Parallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

注意

THROW ステートメントは SET XACT_ABORT に従いますが、The THROW statement honors SET XACT_ABORT. RAISERROR は従いません。RAISERROR does not. 新しいアプリケーションでは、RAISERROR の代わりに THROW を使ってください。New applications should use THROW instead of RAISERROR.

Transact-SQLTransact-SQL ステートメントによって実行時エラーが発生した場合に、 SQL ServerSQL Server が自動的に現在のトランザクションをロールバックするかどうかを指定します。Specifies whether SQL ServerSQL Server automatically rolls back the current transaction when a Transact-SQLTransact-SQL statement raises a run-time error.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions

構文Syntax

SET XACT_ABORT { ON | OFF }  

RemarksRemarks

SET XACT_ABORT が ON の場合は、 Transact-SQLTransact-SQL ステートメントで実行時エラーが発生すると、トランザクション全体が終了し、ロールバックされます。When SET XACT_ABORT is ON, if a Transact-SQLTransact-SQL statement raises a run-time error, the entire transaction is terminated and rolled back.

SET XACT_ABORT が OFF の場合は、エラーが発生した Transact-SQLTransact-SQL ステートメントのみがロールバックされ、トランザクションの処理は継続される場合があります。When SET XACT_ABORT is OFF, in some cases only the Transact-SQLTransact-SQL statement that raised the error is rolled back and the transaction continues processing. SET XACT_ABORT が OFF であっても、エラーの重大度によってはトランザクション全体がロールバックされる場合があります。Depending upon the severity of the error, the entire transaction may be rolled back even when SET XACT_ABORT is OFF. OFF が既定の設定です。OFF is the default setting.

構文エラーなどのコンパイル エラーは、SET XACT_ABORT の設定の影響を受けません。Compile errors, such as syntax errors, are not affected by SET XACT_ABORT.

SQL ServerSQL Server などのほとんどの OLE DB プロバイダーに対する、明示的または暗黙的なトランザクションのデータ変更ステートメントでは、XACT_ABORT は必ず ON にします。XACT_ABORT must be set ON for data modification statements in an implicit or explicit transaction against most OLE DB providers, including SQL ServerSQL Server. このオプションが要求されないのは、入れ子になったトランザクションをプロバイダーがサポートしている場合のみです。The only case where this option is not required is if the provider supports nested transactions.

ANSI_WARNINGS=OFF の場合、権限違反によってトランザクションは中止されます。When ANSI_WARNINGS=OFF, permissions violations cause transactions to abort.

SET XACT_ABORT は、解析時ではなく実行時に設定されます。The setting of SET XACT_ABORT is set at execute or run time and not at parse time.

この設定の現在の設定を表示するには、次のクエリを実行します。To view the current setting for this setting, run the following query.

DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';  
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';  
SELECT @XACT_ABORT AS XACT_ABORT;  

使用例Examples

次の例では、他の Transact-SQLTransact-SQL ステートメントを含むトランザクションで、外部キー違反エラーが発生します。The following code example causes a foreign key violation error in a transaction that has other Transact-SQLTransact-SQL statements. 最初のステートメント セットでは、エラーが生成されますが、他のステートメントは正常に実行され、トランザクションは正常にコミットされます。In the first set of statements, the error is generated, but the other statements execute successfully and the transaction is successfully committed. 2 番目のステートメントでは、SET XACT_ABORTON に設定されます。In the second set of statements, SET XACT_ABORT is set to ON. このため、ステートメント エラーが発生すると、バッチが終了し、トランザクションはロールバックされます。This causes the statement error to terminate the batch and the transaction is rolled back.

USE AdventureWorks2012;  
GO  
IF OBJECT_ID(N't2', N'U') IS NOT NULL  
    DROP TABLE t2;  
GO  
IF OBJECT_ID(N't1', N'U') IS NOT NULL  
    DROP TABLE t1;  
GO  
CREATE TABLE t1  
    (a INT NOT NULL PRIMARY KEY);  
CREATE TABLE t2  
    (a INT NOT NULL REFERENCES t1(a));  
GO  
INSERT INTO t1 VALUES (1);  
INSERT INTO t1 VALUES (3);  
INSERT INTO t1 VALUES (4);  
INSERT INTO t1 VALUES (6);  
GO  
SET XACT_ABORT OFF;  
GO  
BEGIN TRANSACTION;  
INSERT INTO t2 VALUES (1);  
INSERT INTO t2 VALUES (2); -- Foreign key error.  
INSERT INTO t2 VALUES (3);  
COMMIT TRANSACTION;  
GO  
SET XACT_ABORT ON;  
GO  
BEGIN TRANSACTION;  
INSERT INTO t2 VALUES (4);  
INSERT INTO t2 VALUES (5); -- Foreign key error.  
INSERT INTO t2 VALUES (6);  
COMMIT TRANSACTION;  
GO  
-- SELECT shows only keys 1 and 3 added.   
-- Key 2 insert failed and was rolled back, but  
-- XACT_ABORT was OFF and rest of transaction  
-- succeeded.  
-- Key 5 insert error with XACT_ABORT ON caused  
-- all of the second transaction to roll back.  
SELECT *  
    FROM t2;  
GO  

参照See Also

THROW (Transact-SQL) THROW (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL) BEGIN TRANSACTION (Transact-SQL)
COMMIT TRANSACTION (Transact-SQL) COMMIT TRANSACTION (Transact-SQL)
ROLLBACK TRANSACTION (Transact-SQL) ROLLBACK TRANSACTION (Transact-SQL)
SET ステートメント (Transact-SQL) SET Statements (Transact-SQL)
@@TRANCOUNT (Transact-SQL)@@TRANCOUNT (Transact-SQL)