我的应用程序(使用带有SQL Server 2000的SQL Native Client的C ++)始终如一地进入挂起状态。我相信这是因为事务在某个表上的某个地方是未提交的,并且由于打开的事务,该表上的SELECT查询正在阻塞。
不幸的是,我确实无法确定挂起的事务在我的代码中的位置。有没有办法让SQL Server指出在未提交的事务上运行了哪些查询?
答案 0 :(得分:4)
如果你有admin(sa)proviliges,你可以运行sp_Who或sp_Who2 通过Spid,Run
显示所有服务器活动Exec sp_Who2 [SpidNumber]
只看到您感兴趣的一个会话......
要直接查看已打开的交易,请运行
DBCC OPENTRAN(T-SQL) 显示有关指定数据库中最早的活动事务和最早的分布式和非分布式复制事务(如果有)的信息。仅当存在活动事务或数据库包含复制信息时,才会显示结果。如果没有活动的交易,则会显示信息性消息。
Syntax
DBCC OPENTRAN
( {'database_name' | database_id}
) [ WITH TABLERESULTS [, NO_INFOMSGS]
]
但是,当用户会话终止时,Sql Server应自动回滚任何打开的事务。