SET IMPLICIT_TRANSACTIONS (Transact-SQL)
Legt den impliziten Transaktionsmodus für die Verbindung fest.
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 |
CREATE |
GRANT |
SELECT |
DELETE |
INSERT |
TRUNCATE TABLE |
DROP |
OPEN |
UPDATE |
Befindet sich die Verbindung bereits in einer geöffneten Transaktion, so 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 Native Client-OLE DB-Anbieter für SQL Server und der SQL Native Client-ODBC-Treiber legen beim Herstellen einer Verbindung IMPLICIT_TRANSACTIONS automatisch auf OFF fest. SET IMPLICIT_TRANSACTIONS wird für Verbindungen mit dem SQLClient-verwalteten 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
Siehe auch
Verweis
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)