我有一个非常直接的选择查询,例如:
SELECT * FROM PWCWarehouse(无锁)WHERE PWCWarehouseID = 4
这个查询被调用了很多次,大多数时候它返回的记录都很好,但偶尔它什么也没有返回,即使记录仍然存在。这可能是什么原因?可能是因为被更新记录的其他进程锁定了吗?我一直在尝试不同的隔离级别,目前有 Isolation level = RepeatableRead 这样应该可以读取 volatile 数据?
这张表只有6条记录,记录不增不减,对这张表的操作只有上面的读取和更新。
知道这里发生了什么吗?
最佳答案
这几乎肯定是锁定问题。
如果您在尝试读取该记录的同时(可能)更新该记录,您应该不使用NOLOCK
提示,因为这将允许脏读。
如果记录已删除并正在插入,或已更新但未提交,则使用 NOLOCK
的 SELECT
将看不到它。
关于SQL 查询间歇性返回无结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122984/