简单选择不返回所有行,sp_who不返回任何块

时间:2015-03-19 20:42:44

标签: sql sql-server transactions nolock

我在一个行数很少的表上运行一个简单的选择,它正在永远运行。我发现如果我运行它会返回正常:

SELECT TOP 23 * FROM MyTable ORDER BY 1

但是,如果我跑的话,它会永远挂起:

SELECT TOP 24 * FROM MyTable ORDER BY 1

如果我运行sp_whosp_who2,则无法阻止。为什么会发生这种情况,我该如何解决?

1 个答案:

答案 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