SET IMPLICIT_TRANSACTIONS (Transact-SQL)
Устанавливает для соединения режим неявных транзакций.
Соглашения о синтаксисе в Transact-SQL
Синтаксис
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Замечания
Присвоение параметру SET IMPLICIT_TRANSACTIONS значения ON устанавливает для соединения режим неявных транзакций. Значение OFF возвращает соединение в режим с автоматической фиксацией транзакций.
Когда соединение находится в режиме неявных транзакций, и соединение в этот момент не участвует в транзакции, выполнение любой из следующих инструкций начнет транзакцию.
ALTER TABLE |
FETCH |
REVOKE |
CREATE |
GRANT |
SELECT |
DELETE |
INSERT |
TRUNCATE TABLE |
DROP |
OPEN |
UPDATE |
Если соединение уже начало транзакцию, эти инструкции не начинают новую транзакцию.
Для транзакций, автоматически открываемых в результате присвоения этому параметру значения ON, пользователю необходимо явно выполнить в конце транзакции фиксацию или откат. Иначе после отключения пользователя будет выполнен откат транзакции и будут потеряны все сделанные ей изменения данных. После фиксации транзакции выполнение одной из указанных выше инструкций начнет новую транзакцию.
Режим неявных транзакций остается в силе, пока в соединении не будет выполнена инструкция SET IMPLICIT_TRANSACTIONS OFF, которая вернет соединение в режим автоматической фиксации. В режиме автоматической фиксации все отдельные инструкции фиксируются в случае успешного завершения.
Поставщик OLE DB и драйвер ODBC для собственного клиента SQL Server при подключении автоматически устанавливают для параметра IMPLICIT_TRANSACTIONS значение OFF. SET IMPLICIT_TRANSACTIONS по умолчанию устанавливается в OFF для соединений с управляемым поставщиком SQLClient и запросов SOAP, получаемых через конечные точки протокола HTTP.
При присвоении параметру SET ANSI_DEFAULTS значения ON параметр SET IMPLICIT_TRANSACTIONS получает значение ON.
Значение SET IMPLICIT_TRANSACTIONS устанавливается во время выполнения или запуска, а не во время синтаксического анализа.
Примеры
Следующий пример демонстрирует явный и неявный запуск транзакций при присвоении параметру IMPLICIT_TRANSACTIONS
значения ON
. Для демонстрации открытых и закрытых транзакций в нем используется функция @@TRANCOUNT
.
USE AdventureWorks;
GO
SET NOCOUNT ON;
GO
SET IMPLICIT_TRANSACTIONS OFF;
GO
PRINT N'Tran count at start = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
IF OBJECT_ID(N'dbo.t1',N'U') IS NOT NULL
DROP TABLE dbo.t1;
GO
CREATE table dbo.t1 (a int);
GO
INSERT INTO dbo.t1 VALUES (1);
GO
PRINT N'Use explicit transaction.';
BEGIN TRANSACTION;
GO
INSERT INTO dbo.t1 VALUES (2);
GO
PRINT N'Tran count in explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
GO
PRINT N'Tran count after explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N'Setting IMPLICIT_TRANSACTIONS ON.';
GO
SET IMPLICIT_TRANSACTIONS ON;
GO
PRINT N'Use implicit transactions.';
GO
-- No BEGIN TRAN needed here.
INSERT INTO dbo.t1 VALUES (4);
GO
PRINT N'Tran count in implicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
COMMIT TRANSACTION;
PRINT N'Tran count after implicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
PRINT N'Nest an explicit transaction with IMPLICIT_TRANSACTIONS ON.';
GO
PRINT N'Tran count before nested explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
BEGIN TRANSACTION;
PRINT N'Tran count after nested BEGIN TRAN in implicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
INSERT INTO dbo.t1 VALUES (5);
COMMIT TRANSACTION;
PRINT N'Tran count after nested explicit transaction = '
+ CAST(@@TRANCOUNT AS NVARCHAR(10));
GO
-- Commit outstanding tran.
COMMIT TRANSACTION;
GO
См. также
Справочник
ALTER TABLE (Transact-SQL)
BEGIN TRANSACTION (Transact-SQL)
CREATE TABLE (Transact-SQL)
DELETE (Transact-SQL)
DROP TABLE (Transact-SQL)
FETCH (Transact-SQL)
Инструкция GRANT (Transact-SQL)
INSERT (Transact-SQL)
OPEN (Transact-SQL)
REVOKE (Transact-SQL)
SELECT (Transact-SQL)
SET (Transact-SQL)
SET ANSI_DEFAULTS (Transact-SQL)
@@TRANCOUNT (Transact-SQL)
TRUNCATE TABLE (Transact-SQL)
UPDATE (Transact-SQL)