Jus*_*ner 10 t-sql transactions sql-server-2005
在SQL Server中,我如何知道我当前使用的事务模式?如autocommit,显式或隐式.如何使用tsql将一种模式更改为另一种模式?十分感谢.
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参考:
select @@OPTIONS & 2
Run Code Online (Sandbox Code Playgroud)
如果返回2,则表示您处于隐式事务模式.如果它返回0,那么你就是自动提交.
要切换你所使用的模式,你可以使用
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)