Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Относится к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Аналитическая платформа (PDW)
SQL база данных в Microsoft Fabric
Примечание.
Инструкция THROW учитывает SET XACT_ABORT. Инструкция RAISERROR — нет. В новых приложениях следует использовать инструкцию THROW вместо RAISERROR.
Указывает, выполняет ли SQL Server автоматический откат текущей транзакции, если инструкция Transact-SQL вызывает ошибку выполнения.
Соглашения о синтаксисе Transact-SQL
Синтаксис
SET XACT_ABORT { ON | OFF }
Замечания
Если выполнена инструкция SET XACT_ABORT ON, а инструкция Transact-SQL вызывает ошибку времени выполнения, вся транзакция завершается и выполняется ее откат.
Если аргумент SET XACT_ABORT имеет значение OFF, в некоторых случаях выполняется откат только проблемной инструкции Transact-SQL, а обработка остальной части транзакции продолжается. В зависимости от серьезности ошибки возможен откат всей транзакции при выполненной инструкции SET XACT_ABORT OFF. OFF — это значение по умолчанию в инструкции T-SQL, а ON — значение по умолчанию в триггере.
Инструкция SET XACT_ABORT не влияет на компиляцию ошибок (например, синтаксических).
Параметр XACT_ABORT должен иметь значение ON для инструкций изменения данных в явных или неявных транзакциях, применяющихся к большинству поставщиков OLE DB, включая SQL Server. Единственным случаем, когда этот параметр не требуется, является поддержка поставщиком вложенных транзакций.
Когда ANSI_WARNINGS=OFF, нарушения разрешений вызывают отмену транзакций.
Значение параметра XACT_ABORT устанавливается во время выполнения, а не во время синтаксического анализа.
Чтобы просмотреть текущее значение для этого параметра, выполните следующий запрос.
DECLARE @XACT_ABORT VARCHAR(3) = 'OFF';
IF ( (16384 & @@OPTIONS) = 16384 ) SET @XACT_ABORT = 'ON';
SELECT @XACT_ABORT AS XACT_ABORT;
Примеры
Следующий программный код вызывает ошибку нарушения внешнего ключа в транзакции, в состав которой входят другие инструкции Transact-SQL. В первом наборе инструкций происходит ошибка, но остальные инструкции выполняются успешно, и транзакция фиксируется. Во втором наборе инструкций параметру SET XACT_ABORT присваивается значение ON. Это приводит к тому, что ошибка инструкции завершает пакет и выполняется откат транзакции.
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