MS Access:SQL WITH(NOLOCK)vs Select Distinct?

时间:2014-08-05 15:12:01

标签: ms-access access-vba

我有一个包含多个用户的Access应用。我的任务似乎偶尔会导致碰撞:

  1. 用户将链接的SQL Server表中的数据提取到本地数据库,简单:

    SELECT dbo_Item.*
    FROM dbo_Item
    WHERE (((dbo_Item.INVID)=4892));
    
  2. 其中一些提取可能涉及350K +记录,需要> ~2分钟才能完成

  3. 我目前有db.QueryTimeout = 0
  4. 如果两个用户同时尝试访问远程表,我们偶尔会看到SQL /网络错误。他们不会尝试访问相同的数据集。
  5. 我怀疑这是一个超时问题,因为ERR会在1-2分钟内抛出
  6. SQL Server端数据的所有者建议在我的Access查询中添加(NOLOCK)提示。我没有看到这是一个选项,但我确实找到一个随机的建议,即执行一个' SELECT DISTINCT"'不会锁定表 - 这是真的吗?

    任何避免记录锁定问题的建议 - 或者想要寻找什么?

    谢谢!

2 个答案:

答案 0 :(得分:1)

他们是在搜索350k记录还是复制350k记录?

如果搜索350k记录,INVID上的索引可能会有用。

如果复制350k记录,DISTINCT可以通过删除重复项来减少这种情况,但如果没有重复的条目,则无效。

如果其他人访问相同的数据,NOLOCK会有所帮助,实际上是将数据打开供其他人修改,但您的描述是他们正在访问不同的数据。如果来自同一张桌子,NOLOCK可以提供帮助。

答案 1 :(得分:1)

我决定使用带有(NOLOCK)的passthru SELECT查询。然后,我基于passthru SELECT查询创建了一个make_table查询。似乎工作得很好。