Condividi tramite


SET IMPLICIT_TRANSACTIONS (Transact-SQL)

Imposta la modalità di transazione implicita per la connessione.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

SET IMPLICIT_TRANSACTIONS { ON | OFF }

Osservazioni

Quando è impostata su ON, l'opzione SET IMPLICIT_TRANSACTIONS imposta per la connessione la modalità di transazione implicita. Quando è impostata su OFF, ripristina la modalità di transazione con autocommit.

Quando in una connessione è attivata la modalità di transazione implicita, ma la connessione non è inclusa in una transazione, l'esecuzione di una delle istruzioni seguenti comporta l'avvio di una transazione:

ALTER TABLE

FETCH

REVOKE

BEGIN TRANSACTION

GRANT

SELECT

CREATE

INSERT

TRUNCATE TABLE

DELETE

OPEN

UPDATE

DROP

Se la connessione è già inclusa in una transazione aperta, le istruzioni non avviano una nuova transazione.

Per le transazioni che vengono aperte automaticamente in seguito all'impostazione dell'opzione su ON, è necessario che l'utente esegua il commit o il rollback in modo esplicito al termine della transazione. In caso contrario, quando l'utente si disconnette viene eseguito il rollback della transazione e di tutte le modifiche dei dati. Dopo il commit di una transazione, l'esecuzione di una delle istruzioni elencate in precedenza comporta l'avvio di una nuova transazione.

La modalità di transazione implicita rimane attiva fino a quando la connessione non esegue un'istruzione SET IMPLICIT_TRANSACTIONS OFF, con cui viene ripristinata per la connessione la modalità di autocommit. In base a questa modalità viene eseguito il commit di tutte le singole istruzioni completate correttamente.

Il provider OLE DB Native Client SQL Server per SQL Server e il driver ODBC Native Client SQL Server impostano automaticamente l'opzione IMPLICIT_TRANSACTIONS su OFF al momento della connessione. L'impostazione predefinita di SET IMPLICIT_TRANSACTIONS è OFF per il provider gestito SQLClient e per le richieste SOAP ricevute tramite gli endpoint HTTP.

Quando l'opzione SET ANSI_DEFAULTS è impostata su ON, l'opzione SET IMPLICIT_TRANSACTIONS è ON.

L'opzione SET IMPLICIT_TRANSACTIONS viene impostata in fase di esecuzione, non in fase di analisi.

Esempi

Nell'esempio seguente vengono illustrati l'avvio implicito ed esplicito di transazioni tramite l'opzione IMPLICIT_TRANSACTIONS impostata su ON. Viene utilizzata la funzione @@TRANCOUNT per illustrare transazioni aperte e chiuse.

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