2010-05-27 18 views

risposta

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' 

non lo faccio penso che ci sia un modo per determinare se la transazione corrente è stata avviata in modo esplicito o implicito. Quindi, questo codice prova solo a indovinare: se IMPLICIT_TRANSACTIONS è OFF, si presume che la transazione venga avviata esplicitamente.

MSDN riferimenti:

+1

Penso che il messaggio" Nessuna transazione corrente, modalità di autocommit (default) "sia un po 'fuorviante dal momento che autocommit non è completamente sicuro a questo punto, la connessione potrebbe essere impostata per le transazioni implicite ma poiché nessuna istruzione era rilasciato ancora, nessuna transazione è stata avviata. – MaxiWheat

5
select @@OPTIONS & 2 

se restituisce 2, si è in modalità di transazione implicita. Se restituisce 0, sei in autocommit.

BOL for @@OPTIONS

BOL for what each option is

Per cambiare la modalità ci si trovi, devi usare

set implicit_transactions on 

o

set implicit_transactions off 
+0

Dovrebbe essere implicit_transactions. –

+0

@daniel_aren - true, ora cambiato. Non so perché non è stato avvistato prima. –

+0

L'accensione/spegnimento avviene al livello del server o alla sessione attiva in cui si sta verificando la transazione? – SQLnbe

3

leggera modifica al copione precedentemente pubblicato - connessione è in modalità autocommit se non c'è alcuna transazione attiva e transazioni implicite sono spenti :

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)) 
Problemi correlati