【问题标题】:Update Query Timeout on SQL Server View with MS Access使用 MS Access 更新 SQL Server 视图上的查询超时
【发布时间】:2018-07-23 22:46:16
【问题描述】:

我在通过 MS Access 更新 SQL Server 视图时遇到了一些问题。用于此的表集是基于基表构建的。这个基表就是这种格式。

Id    int (not-nullable; auto-assigned)
A1    varchar(50) (nullable)
A2    varchar(50) (nullable)
B1    varchar(50) (nullable)
B2    varchar(50) (nullable)
C1    varchar(50) (nullable)
C2    varchar(50) (nullable)

此表中的一行由我们公司的多组用户更新。例如,用户组“A”更新列“A1”和“A2”,用户组“B”更新列“B1”和“B2”,等等。但是,我们还想防止用户组“A”更新用户组“B”的列。为此,我设置了一个视图,其中包含适合每个用户组的列。例如,用户组“A”的视图将只包含“Id”、“A1”和“A2”列。然后我将 SSMS 中视图上的“绑定到架构”选项设置为“是”,并在每个视图的“Id”列上设置一个唯一的聚集索引。在 MS Access 中,我使用 ODBC 连接将这些视图作为链接表连接到。当我在设计视图中打开 MS Access 中的表并检查索引时,它确实将“Id”列正确识别为主键。

这就是问题所在:当我尝试在其中一个视图中通过 MS Access 更新记录时,有时更新会立即运行,但有时更新会超时。这是我得到的错误。

“SM_Notes_Bridge”是我的一个视图的实际名称。我可以在网上找到的几乎所有以前的答案都说增加了在 MS Access 中更新超时之前的时间,这似乎不是我的问题的解决方案,因为更新要么立即运行,要么超时。没有中间立场。

另一个注意事项是我目前是唯一使用此基表和这些视图的人。此外,重要的系统是围绕该基表结构开发的,因此更改其结构需要很多说服力。

【问题讨论】:

  • 能否请您简要描述一下。没有人会花时间阅读这一切。
  • 当然。我会花一些时间尝试将其简化。
  • 谢谢 .. 听起来不错 -:)
  • 要尝试的事情:1)如果您直接链接Access中的基表,并在那里编辑记录,是否会发生超时? 2)删除视图上的唯一索引。它们并不是真正需要的,您只需在链接视图时告诉 Access Id 是 PK。
  • 我会在 sql server 中进行更新,而不是通过查询。这意味着创建一个存储过程,然后您将从 Access 中执行该过程。这将开始在您的应用程序中构建层,在某些时候您会很感激,因为如果这个应用程序变得很大,您将需要一个不同的前端。如果您的 sql 分散在应用程序中,这将非常困难。如果数据工作在数据库中,或者至少在数据层中,这会变得简单很多。

标签: sql sql-server ms-access odbc jet-sql


【解决方案1】:

通过在模式绑定视图上创建唯一索引,您正在创建一个索引视图,也称为materialized view

索引视图的相关属性:

在由大量索引视图或较少但非常复杂的索引视图引用的表上执行 DML 时,这些引用的索引视图也必须更新。因此,DML 查询性能会显着下降,或者在某些情况下,甚至无法生成查询计划 (MSDN)。

因此,在经常更新的表上创建多个索引视图是一个很大的禁忌!查看this MSDN page 以进一步说明何时以及何时不使用索引视图。每个插入和更新都必须传播到所有索引视图,并且也会导致这些视图锁定。

删除该表上 ALL 视图的索引。据您告诉我,根本没有理由使用索引视图,它们会在执行更新时严重损害性能。即使这不能解决这个问题,它也会提高性能。

【讨论】:

  • 这很可能是我的问题。为了在帖子中简单起见,我只列出了几个视图,但实际上这个表有 15 个视图,每个视图有 2 个索引。我已经离开办公室了,但我肯定会在明天早上第一件事尝试,如果解决了问题,我会回来接受这个答案。
  • 这个解决方案似乎解决了我的问题。非常感谢!我仍然不得不强制 MS Access 将列视为主键,但我删除了索引,一切似乎都正常。对于任何好奇的人,您可以使用以下链接中的答案来强制 Access 将列视为主键。 stackoverflow.com/questions/30915181/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多