Partager via


SET IMPLICIT_TRANSACTIONS (Transact-SQL)

Définit le mode de transaction implicite pour la connexion.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

SET IMPLICIT_TRANSACTIONS { ON | OFF }

Notes

Si sa valeur est ON, SET IMPLICIT_TRANSACTIONS met la connexion en mode de transaction implicite. Si la valeur est OFF, la connexion est remise en mode d'autovalidation.

Si une connexion est en mode de transaction implicite et qu'elle ne figure pas actuellement dans une transaction, l'exécution de l'une des instructions suivantes démarre la transaction :

ALTER TABLE

FETCH

REVOKE

BEGIN TRANSACTION

GRANT

SELECT

CREATE

INSERT

TRUNCATE TABLE

DELETE

OPEN

UPDATE

DROP

Si la connexion figure déjà dans une transaction ouverte, les instructions ne démarrent pas de nouvelle transaction.

Si des transactions sont automatiquement ouvertes, résultant de l'activation de ce paramètre, ces dernières doivent être explicitement validées ou annulées par l'utilisateur à la fin de la transaction. Dans le cas contraire, la transaction et toutes les modifications de données qu'elle contient sont annulées lorsque l'utilisateur met fin à la connexion. Après la validation d'une transaction, l'exécution de l'une des instructions ci-dessus démarre une nouvelle transaction.

Le mode de transaction implicite reste en vigueur jusqu'à ce que la connexion exécute une instruction SET IMPLICIT_TRANSACTIONS OFF qui remet la connexion en mode d'autovalidation En mode d'autovalidation, toutes les instructions individuelles exécutées normalement sont validées.

Le fournisseur OLE DB de SQL Server Native Client pour SQL Server et le pilote ODBC de SQL Server Native Client attribuent automatiquement la valeur OFF à IMPLICIT_TRANSACTIONS lors de la connexion. SET IMPLICIT_TRANSACTIONS prend la valeur par défaut OFF pour les connexions avec le fournisseur managé SQLClient et pour les requêtes SOAP reçues via des points de terminaison HTTP.

Lorsque SET ANSI_DEFAULTS a la valeur ON, l'option SET IMPLICIT_TRANSACTIONS est activée.

La valeur de SET IMPLICIT_TRANSACTIONS est définie lors de l'exécution, et non pas durant l'analyse.

Exemples

L'exemple ci-dessous illustre des transactions démarrées explicitement et implicitement lorsque l'option IMPLICIT_TRANSACTIONS a la valeur ON. Il utilise la fonction @@TRANCOUNT pour illustrer des transactions ouvertes et fermées.

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