我在一个行数很少的表上运行一个简单的选择,它正在永远运行。我发现如果我运行它会返回正常:
SELECT TOP 23 * FROM MyTable ORDER BY 1
但是,如果我跑的话,它会永远挂起:
SELECT TOP 24 * FROM MyTable ORDER BY 1
如果我运行sp_who
或sp_who2
,则无法阻止。为什么会发生这种情况,我该如何解决?
答案 0 :(得分:0)
如果您使用nolock
运行(忽略未提交的事务),您应该能够选择所有行:
SELECT * FROM MyTable WITH (NOLOCK)
某个地方的交易尚未提交或回滚(我不确定为什么它没有出现在sp_who
中)。您可以运行以下命令强制所有事务回滚,然后在没有nolock
的情况下选择应该正常工作:
USE master
ALTER DATABASE DbName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DbName SET MULTI_USER