我有一个非常直接的选择查询,例如:
SELECT * FROM PWCWarehouse (nolock) WHERE PWCWarehouseID = 4
这个查询被大量调用,并且大多数时候它返回记录就好了,但偶尔也没有返回任何内容,即使记录仍然存在。这可能是什么原因?可能是因为正在更新记录的其他进程锁定?我一直在尝试不同的隔离级别,目前有隔离级别= RepeatableRead,因此应该可以读取易失性数据吗?
此表中只有6条记录,它们永远不会增加或减少,此表上的唯一操作是上述读取和更新。
这里有什么想法吗?
答案 0 :(得分:5)
这几乎肯定是一个锁定问题。
如果您在尝试阅读时同时更新该记录(可能),则 NOT 使用NOLOCK
提示,因为这将允许脏读。
如果记录已被删除并且正在插入,或已更新但未提交,则SELECT
使用NOLOCK
将无法显示该记录。
答案 1 :(得分:1)
如果要读取已更改但仍未提交的行,可以使用ReadUncommitted隔离级别。 这应该允许您在没有锁定的情况下进行读取,同时仍然可以看到未提交的更改。