在SQL Server中,我如何知道我当前使用的事务模式?

Jus*_*ner 10 t-sql transactions sql-server-2005

在SQL Server中,我如何知道我当前使用的事务模式?如autocommit,显式或隐式.如何使用tsql将一种模式更改为另一种模式?十分感谢.

Vla*_*adV 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'
Run Code Online (Sandbox Code Playgroud)

我认为没有办法确定当前的交易是明确地还是隐含地开始的.因此,此代码只是试图猜测:如果IMPLICIT_TRANSACTIONS为OFF,则假定事务是显式启动的.

MSDN参考:


Dam*_*ver 5

select @@OPTIONS & 2
Run Code Online (Sandbox Code Playgroud)

如果返回2,则表示您处于隐式事务模式.如果它返回0,那么你就是自动提交.

BOL for @@ OPTIONS

BOL了解每个选项的含义

要切换你所使用的模式,你可以使用

set implicit_transactions on
Run Code Online (Sandbox Code Playgroud)

要么

set implicit_transactions off
Run Code Online (Sandbox Code Playgroud)


小智 5

对先前发布的脚本进行少量修改-如果没有活动的事务并且隐式事务已关闭,则连接处于自动提交模式:

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))
Run Code Online (Sandbox Code Playgroud)