简单 select 不返回所有行并且 sp_who returns 没有块

Simple select not returning all rows and sp_who returns no blocks

我正在 运行ning 一个简单的 select on a table with a small amount of rows,它永远 运行ning。我发现 returns 如果我 运行:

SELECT TOP 23 * FROM MyTable ORDER BY 1

但是,如果我 运行:

它会永远挂起
SELECT TOP 24 * FROM MyTable ORDER BY 1

如果我运行sp_who或者sp_who2,没有人挡。为什么会发生这种情况,我该如何解决?

如果您 运行 开启 nolock(忽略未提交的事务),您应该能够 select 所有行:

SELECT * FROM MyTable WITH (NOLOCK)

某处有一个事务尚未提交或回滚(我不确定为什么它没有出现在 sp_who 中)。您可以 运行 以下命令强制所有事务回滚,然后 selecting 应该可以在没有 nolock 的情况下正常工作:

USE master
ALTER DATABASE DbName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE DbName SET MULTI_USER