我有一个包含多个用户的Access应用。我的任务似乎偶尔会导致碰撞:
用户将链接的SQL Server表中的数据提取到本地数据库,简单:
SELECT dbo_Item.*
FROM dbo_Item
WHERE (((dbo_Item.INVID)=4892));
其中一些提取可能涉及350K +记录,需要> ~2分钟才能完成
db.QueryTimeout = 0
SQL Server端数据的所有者建议在我的Access查询中添加(NOLOCK)提示。我没有看到这是一个选项,但我确实找到一个随机的建议,即执行一个' SELECT DISTINCT"'不会锁定表 - 这是真的吗?
任何避免记录锁定问题的建议 - 或者想要寻找什么?
谢谢!
答案 0 :(得分:1)
他们是在搜索350k记录还是复制350k记录?
如果搜索350k记录,INVID上的索引可能会有用。
如果复制350k记录,DISTINCT可以通过删除重复项来减少这种情况,但如果没有重复的条目,则无效。
如果其他人访问相同的数据,NOLOCK会有所帮助,实际上是将数据打开供其他人修改,但您的描述是他们正在访问不同的数据。如果来自同一张桌子,NOLOCK可以提供帮助。
答案 1 :(得分:1)
我决定使用带有(NOLOCK)的passthru SELECT查询。然后,我基于passthru SELECT查询创建了一个make_table查询。似乎工作得很好。