繁体   English   中英

使用 MS Access 更新 SQL Server 视图上的查询超时

[英]Update Query Timeout on SQL Server View with MS Access

我在通过 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 中更新超时之前的时间量,这似乎不是我的问题的解决方案,因为更新要么立即运行,要么超时。 没有回旋的余地。

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

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

索引视图的相关属性:

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

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

删除该表上所有视图的索引。 就您告诉我的而言,完全没有理由使用索引视图,并且它们会在执行更新时以主要方式损害性能。 即使这没有解决这个问题,它也会提高性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM