dans SQL Server, comment puis-je savoir quel mode de transaction utilise-t-il actuellement? Telle que autocommande, explicite ou implicite em> forte>. Et comment puis-je modifier un mode à un autre en utilisant TSQL? Grand merci. P>
3 Réponses :
set implicit_transactions off
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 B> fonctionne en mode transaction implicite ... "(mon emphpasis)
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
Je pense que le message aucune transaction de courant, le mode Autocommit (par défaut) code> 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.
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))