SET IMPLICIT_TRANSACTIONS (Transact-SQL)

Establece el modo de transacción implícita para la conexión.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

SET IMPLICIT_TRANSACTIONS { ON | OFF }

Comentarios

Cuando es ON, SET IMPLICIT_TRANSACTIONS establece la conexión al modo de transacción implícita. Cuando es OFF, restablece la conexión al modo de transacción con confirmación automática.

Cuando una conexión está en modo de transacción implícita y actualmente no está realizando una transacción, la ejecución de cualquiera de las instrucciones siguientes inicia una transacción:

ALTER TABLE

FETCH

REVOKE

BEGIN TRANSACTION

GRANT

SELECT

CREATE

INSERT

TRUNCATE TABLE

DELETE

OPEN

UPDATE

DROP

Si la conexión tiene ya una transacción abierta, estas instrucciones no inician una nueva transacción.

Al término de las transacciones que se abran automáticamente por ser esta opción ON, el usuario debe confirmarlas o revertirlas explícitamente. En caso contrario, las transacciones y todos los cambios que se realicen en los datos se revertirán cuando el usuario se desconecte. Una vez confirmada una transacción, la ejecución de alguna de las instrucciones anteriores iniciará una transacción nueva.

El modo de transacción implícita permanecerá activo hasta que la conexión ejecute una instrucción SET IMPLICIT_TRANSACTIONS OFF, que restablece el modo de confirmación automática en la conexión. En el modo de confirmación automática, todas las instrucciones individuales se confirman cuando finalizan correctamente.

El proveedor OLE DB de SQL Server Native Client para SQL Server y el controlador ODBC de SQL Server Native Client establecen automáticamente IMPLICIT_TRANSACTIONS en OFF al conectarse. SET IMPLICIT_TRANSACTIONS tiene el valor predeterminado OFF para conexiones con el proveedor administrado SQLClient y para solicitudes SOAP recibidas a través de extremos HTTP.

Cuando SET ANSI_DEFAULTS está establecido en ON, SET IMPLICIT_TRANSACTIONS también se establece en ON.

La opción SET IMPLICIT_TRANSACTIONS se establece en tiempo de ejecución, no en tiempo de análisis.

Ejemplos

El ejemplo siguiente muestra transacciones que se inician explícita e implícitamente con IMPLICIT_TRANSACTIONS establecido en ON. Utiliza la función @@TRANCOUNT para mostrar transacciones abiertas y cerradas.

USE AdventureWorks2008R2;
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 transaction.
COMMIT TRANSACTION;
GO