2010-05-27 11 views

Respuesta

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' 

no lo hago Creo que hay una manera de determinar si la transacción actual se inició explícita o implícitamente. Por lo tanto, este código solo intenta adivinar: si IMPLICIT_TRANSACTIONS está desactivado, se supone que la transacción se iniciará explícitamente.

referencias

MSDN:

+1

Creo que el mensaje' No transacción actual, modo autocommit (predeterminado) 'es un poco engañoso ya que el autocommit no es totalmente seguro en este punto, la conexión podría establecerse para transacciones implícitas pero dado que no emitido aún, no se ha iniciado ninguna transacción. – MaxiWheat

5
select @@OPTIONS & 2 

si esto devuelve 2, está en modo de transacción implícita. Si devuelve 0, estás en autocommit.

BOL for @@OPTIONS

BOL for what each option is

Para cambiar el modo que se encuentre, tendrá que utilizar

set implicit_transactions on 

o

set implicit_transactions off 
+0

Debe ser implicit_transactions. –

+0

@daniel_aren - cierto, cambiado ahora. No sé por qué no fue visto antes. –

+0

¿Activar/desactivar esto ocurre en el nivel de Servidor o en la sesión activa donde está ocurriendo la transacción? – SQLnbe

3

Ligera modificación de guión previamente publicado - conexión está en el modo de confirmación automática si no hay ninguna transacción activa y transacciones implícitas están apagados :

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)) 
Cuestiones relacionadas