更新 SQL Server 資料指標中的資料
適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)
透過 SQL Server 資料指標擷取和更新資料時,會繫結到 OLE DB Driver for SQL Server 取用者應用程式,而繫結時的考量與限制,和其他用戶端應用程式的相同。
只有在 SQL Server 資料指標中的資料列才會參與並行資料存取控制。 取用者要求可修改的資料列集時,並行控制會由 DBPROP_LOCKMODE 所控制。 若要修改並行存取控制的層級,取用者會先設定 DBPROP_LOCKMODE 屬性,然後再開啟資料列集。
如果用戶端應用程式設計讓交易長時間保持開啟狀態,交易隔離等級可能會對資料列定位造成重大落後。 根據預設,OLE DB Driver for SQL Server 會使用 DBPROPVAL_TI_READCOMMITTED 所指定的讀取認可隔離等級。 當資料列集並行為唯讀時,OLE DB Driver for SQL Server 支援中途讀取隔離。 因此,取用者可以在可修改的資料列集中要求較高的隔離等級,但是無法成功要求任何較低的等級。
立即和延遲更新模式
在立即更新模式下,每呼叫 IRowsetChange::SetData 一次,就會往返 SQL Server 一次。 如果取用者對單一資料列進行多個變更,利用單一 SetData 呼叫提交所有變更會更有效率。
在延遲更新模式下, IRowsetUpdate::Update 之 cRows 和 rghRows 參數中指定的每個資料列,才會往返 SQL Server。
在任一種模式下,當資料列集沒有開啟任何交易物件時,往返代表不同的交易。
當您使用 IRowsetUpdate::Update 時,OLE DB Driver for SQL Server 會嘗試處理每個指示的資料列。 因為任何資料列的資料、長度或狀態值無效所產生的錯誤不會停止 OLE DB Driver for SQL Server 處理。 參與更新的其他所有資料列或沒有任何資料列可能會遭到修改。 當 OLE DB Driver for SQL Server 傳回 DB_S_ERRORSOCCURRED 時,取用者必須檢查傳回的 prgRowStatus 陣列來判斷是否有任何特定的資料列發生錯誤。
取用者不應該假設資料列會以任何特定順序處理。 如果取用者需要透過一個以上的單一資料列進行資料修改的排序處理,取用者應該以應用程式邏輯建立該順序,並開啟交易來包含程序。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應