SQL查询间歇性地不返回任何结果

时间:2011-08-19 14:21:52

标签: sql sql-server

我有一个非常直接的选择查询,例如:

SELECT * FROM PWCWarehouse (nolock) WHERE PWCWarehouseID = 4

这个查询被大量调用,并且大多数时候它返回记录就好了,但偶尔也没有返回任何内容,即使记录仍然存在。这可能是什么原因?可能是因为正在更新记录的其他进程锁定?我一直在尝试不同的隔离级别,目前有隔离级别= RepeatableRead,因此应该可以读取易失性数据吗?

此表中只有6条记录,它们永远不会增加或减少,此表上的唯一操作是上述读取和更新。

这里有什么想法吗?

2 个答案:

答案 0 :(得分:5)

这几乎肯定是一个锁定问题。

如果您在尝试阅读时同时更新该记录(可能),则 NOT 使用NOLOCK提示,因为这将允许脏读。

如果记录已被删除并且正在插入,或已更新但未提交,则SELECT使用NOLOCK将无法显示该记录。

答案 1 :(得分:1)

如果要读取已更改但仍未提交的行,可以使用ReadUncommitted隔离级别。 这应该允许您在没有锁定的情况下进行读取,同时仍然可以看到未提交的更改。