访问被Select阻止的SQL Server插入

时间:2016-02-02 14:38:32

标签: sql sql-server ms-access ms-access-2013

好的,我们有多用户(25个用户)访问2013 FE和SQL Server 2012 BE。直到昨天整个系统都在运行FINE,现在它已经完全停止了。

  • 如果用户A通过从表Z读取的直接选择查询打开记录,则如果用户B尝试在表Z上执行插入,则他们会收到超时消息。当我转到SQL服务器并运行SP_WH02时,它指出用户B阻止用户B.当我调查阻止用户B的命令时,它只是一个简单的SELECT语句。

有谁知道为什么会这样?

用户A打开的表单有Record Locks = No Locks和Recordset Type = Dynaset

记录源是SELECT,检索两个字段,其中键字段是基于另一个字段的值的参数。

然而,这个系统几个月没有任何变化,所以我很困惑为什么会这样。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

好的,我们解决了。如果其他人有同样的问题:我们将9400个记录存档到一个新表中,现在我们可以再次进行插入。它为我们带来了时间,所以我将进一步规范化表格Z并根据标准自动归档记录。

答案 1 :(得分:0)

可能与MS Access holds locks on table rows indefinitely

中的问题相同或类似

Access仅获取大记录源的前x行,使表保持ASYNC_NETWORK_IO等待状态,即锁定。

可能的解决方案是:

  • 没有选择所有记录的表单或查询。滚动浏览20k +记录通常没有多大意义。
  • 强制访问以获取所有记录,以释放锁定。您可以使用Me.RecordsetClone.MoveLast执行此操作,例如在Form_Load()。仅建议使用快速网络连接。