Freigeben über


SET IMPLICIT_TRANSACTIONS (Transact-SQL)

Legt den impliziten Transaktionsmodus für die Verbindung fest.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SET IMPLICIT_TRANSACTIONS { ON | OFF }

Hinweise

Ist SET IMPLICIT_TRANSACTIONS auf ON festgelegt, so wird für die Verbindung der implizite Transaktionsmodus festgelegt. Ist SET IMPLICIT_TRANSACTIONS auf OFF festgelegt, so kehrt die Verbindung in den Autocommit-Transaktionsmodus zurück.

Wenn eine Verbindung, die sich im impliziten Transaktionsmodus befindet und die zurzeit an keiner Transaktion beteiligt ist, eine der folgenden Anweisungen ausführt, wird eine Transaktion gestartet:

ALTER TABLE

FETCH

REVOKE

BEGIN TRANSACTION

GRANT

SELECT

CREATE

INSERT

TRUNCATE TABLE

DELETE

OPEN

UPDATE

DROP

Wenn sich die Verbindung bereits in einer geöffneten Transaktion befindet, starten diese Anweisungen keine neue Transaktion.

Für Transaktionen, die automatisch geöffnet werden, weil diese Einstellung auf ON festgelegt ist, muss am Ende der Transaktion vom Benutzer explizit ein Commit oder Rollback ausgeführt werden. Andernfalls wird für die Transaktion und alle darin enthaltenen Datenänderungen ein Rollback ausgeführt, wenn der Benutzer die Verbindung trennt. Wird für eine Transaktion ein Commit durchgeführt und dann eine der oben aufgeführten Anweisungen ausgeführt, so wird dadurch eine neue Transaktion gestartet.

Der implizite Transaktionsmodus bleibt wirksam, bis die Verbindung eine SET IMPLICIT_TRANSACTIONS OFF-Anweisung ausführt, wodurch die Verbindung in den Autocommitmodus zurückkehrt. Im Autocommitmodus wird für jede erfolgreich ausgeführte Anweisung ein Commit durchgeführt.

Der SQL Server Native Client-OLE DB-Anbieter für SQL Server und der SQL Server Native Client-ODBC-Treiber legen beim Herstellen einer Verbindung IMPLICIT_TRANSACTIONS automatisch auf OFF fest. SET IMPLICIT_TRANSACTIONS wird für Verbindungen mit dem verwalteten SQLClient-Anbieter und für SOAP-Anforderungen, die über HTTP-Endpunkte empfangen werden, standardmäßig auf OFF festgelegt.

Ist SET ANSI_DEFAULTS auf ON festgelegt, so ist SET IMPLICIT_TRANSACTIONS auf ON festgelegt.

Die Einstellung von SET IMPLICIT_TRANSACTIONS wird zur Ausführungszeit und nicht zur Analysezeit festgelegt.

Beispiele

Im folgenden Beispiel werden Transaktionen gezeigt, die explizit und implizit gestartet werden, wobei IMPLICIT_TRANSACTIONS auf ON festgelegt ist. Die @@TRANCOUNT-Funktion wird verwendet, um geöffnete bzw. geschlossene Transaktionen zu zeigen.

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