SET IMPLICIT_TRANSACTIONS (Transact-SQL)
Establece el modo de transacción implícita para la conexión.
Convenciones de sintaxis de Transact-SQL (Transact-SQL)
Sintaxis
SET IMPLICIT_TRANSACTIONS { ON | OFF }
Notas
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 |
CREATE |
GRANT |
SELECT |
DELETE |
INSERT |
TRUNCATE TABLE |
DROP |
OPEN |
UPDATE |
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 Native Client para SQL Server y el controlador ODBC de SQL 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 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
Vea también
Referencia
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)