簡體   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