10
votes

Dans SQL Server, comment puis-je savoir quel mode de transaction utilise-je actuellement?

dans SQL Server, comment puis-je savoir quel mode de transaction utilise-t-il actuellement? Telle que autocommande, explicite ou implicite . Et comment puis-je modifier un mode à un autre en utilisant TSQL? Grand merci.


0 commentaires

3 Réponses :


6
votes
set implicit_transactions off

4 commentaires

Cela devrait être implicite_transactions.


@Daniel_aren - Vrai, changé maintenant. Je ne sais pas pourquoi il n'a pas été taché auparavant.


Tourner cette marche / arrêt Cela se produit au niveau du serveur ou à la session active où la transaction se produit?


@Sqlnbe - C'est un paramètre de niveau de connexion. Voir Transactions implicites : "Quand un Connexion fonctionne en mode transaction implicite ... "(mon emphpasis)



11
votes
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'
I don't think there is a way to determine whether current transaction was started explicitly or implicitly. So, this code just tries to guess: if IMPLICIT_TRANSACTIONS is OFF, the transaction is assumed to be started explicitly.MSDN references:
@@OPTIONS function
Numeric values for options
@@TRANCOUNT

1 commentaires

Je pense que le message aucune transaction de courant, le mode Autocommit (par défaut) est un peu trompeur car l'autocommit n'est pas totalement sûr à ce stade, la connexion pourrait être définie pour des transactions implicites, mais car aucune déclaration n'a encore été publiée. , aucune transaction n'a été lancée.



5
votes

légère modification de script précédemment affiché - la connexion est en mode Autocommit s'il n'y a pas de transaction active et que les transactions implicites sont désactivées:

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


0 commentaires