2010-05-27 7 views

Antwort

9
IF @@TRANCOUNT = 0 PRINT 'No current transaction, autocommit mode (default)' 
ELSE IF @@OPTIONS & 2 = 0 PRINT 'Implicit transactions is off, explicit transaction is currently running' 
ELSE PRINT 'Implicit transactions is on, implicit or explicit transaction is currently running' 

ich verwenden würde nicht Ich denke, es gibt eine Möglichkeit festzustellen, ob die aktuelle Transaktion explizit oder implizit gestartet wurde. Dieser Code versucht nur zu raten: Wenn IMPLICIT_TRANSACTIONS OFF ist, wird angenommen, dass die Transaktion explizit gestartet wird.

MSDN Referenzen:

+1

Ich denke, dass die Nachricht' Keine aktuelle Transaktion, Autocommit-Modus (Standard) 'ist ein wenig irreführend, da Autocommit zu diesem Zeitpunkt nicht ganz sicher ist, konnte die Verbindung für implizite Transaktionen eingestellt werden, aber da keine Aussage waren ausgegeben, noch wurde keine Transaktion gestartet. – MaxiWheat

5
select @@OPTIONS & 2 

Wenn dies 2 ergibt, befinden Sie sich im impliziten Transaktionsmodus. Wenn es 0 zurückgibt, sind Sie in Autocommit.

BOL for @@OPTIONS

BOL for what each option is

Zum Umschalten in welchem ​​Modus Sie sich befinden, Sie

set implicit_transactions on 

oder

set implicit_transactions off 
+0

Es sollte implizit_transactions sein. –

+0

@daniel_aren - wahr, jetzt geändert. Ich weiß nicht, warum es vorher nicht entdeckt wurde. –

+0

Das Ein-/Ausschalten geschieht auf der Server-Ebene oder in der aktiven Sitzung, in der die Transaktion stattfindet? – SQLnbe

3

Geringfügige Änderung zuvor Skript geschrieben - Verbindung ist im Autocommit-Modus, wenn gibt es keine aktive Transaktion und implizite Transaktionen aus :

IF @@TRANCOUNT = 0 AND (@@OPTIONS & 2 = 0) 
    PRINT 'No current transaction, autocommit mode (default)' 
ELSE IF @@TRANCOUNT = 0 AND (@@OPTIONS & 2 = 2) 
    PRINT 'Implicit transactions is on, no transaction started yet' 
ELSE IF @@OPTIONS & 2 = 0 
    PRINT 'Implicit transactions is off, explicit transaction is currently running' 
ELSE 
    PRINT 'Implicit transactions is on, implicit or explicit transaction is currently running' + CAST(@@OPTIONS & 2 AS VARCHAR(5)) 
Verwandte Themen