如何检查SQL Server 2005中是否存在尚未提交的事务?
是否有人知道用于检查SQL Server 2005中是否存在未提交事务的命令?在SQL 2005、2008中使用或使用DMV运行如何检查SQL Server 2005中是否存在尚未提交的事务?,sql,sql-server,sql-server-2005,transactions,Sql,Sql Server,Sql Server 2005,Transactions,是否有人知道用于检查SQL Server 2005中是否存在未提交事务的命令?在SQL 2005、2008中使用或使用DMV运行 DBCC OPENTRAN XACT_STATE()报告会话的事务状态,指示会话是否有活动事务,以及事务是否能够提交。它返回三个值: 1,会话具有活动事务。会话可以执行任何操作,包括写入数据和提交事务 0,则该会话没有活动的事务 -1,会话有一个活动事务,但发生了一个错误,导致该事务被分类为不可提交事务。会话无法提交事务或回滚到保存点;它只能请求事务的完全回滚。会
DBCC OPENTRAN
XACT_STATE()报告会话的事务状态,指示会话是否有活动事务,以及事务是否能够提交。它返回三个值:
- 1,会话具有活动事务。会话可以执行任何操作,包括写入数据和提交事务李>
- 0,则该会话没有活动的事务李>
- -1,会话有一个活动事务,但发生了一个错误,导致该事务被分类为不可提交事务。会话无法提交事务或回滚到保存点;它只能请求事务的完全回滚。会话在回滚事务之前无法执行任何写入操作。在回滚事务之前,会话只能执行读取操作。事务回滚后,会话可以执行读写操作,并可以开始新的事务
- 0,不在事务中
- 1、在交易中
- n、 在嵌套事务中
执行上面的代码。。。将给出事务发生的会话详细信息。总之,有几种方法:
+1非常好地解释..如何执行事务的完全回滚,正如您所说的
会话无法提交事务或回滚到保存点;它只能请求事务的完全回滚。
。“完全回滚”是什么意思?@KhurramAli,“-1”表示不能使用“提交”或“回滚您的保存点”,但必须使用“回滚”,它基本上将@transcount设置为零,以回滚每个嵌套事务。
SELECT
trans.session_id AS [SESSION ID],
ESes.host_name AS [HOST NAME],login_name AS [Login NAME],
trans.transaction_id AS [TRANSACTION ID],
tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION BEGIN TIME],
tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME]
FROM sys.dm_tran_active_transactions tas
JOIN sys.dm_tran_session_transactions trans
ON (trans.transaction_id=tas.transaction_id)
LEFT OUTER JOIN sys.dm_tran_database_transactions tds
ON (tas.transaction_id = tds.transaction_id )
LEFT OUTER JOIN sys.databases AS DBs
ON tds.database_id = DBs.database_id
LEFT OUTER JOIN sys.dm_exec_sessions AS ESes
ON trans.session_id = ESes.session_id
WHERE ESes.session_id IS NOT NULL