UPDATE 陳述式可能會複寫為 DELETE/INSERT 配對

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:238254
結論
如果更新任何資料行是唯一的條件約束的一部份,那麼 SQL Server 為一個 「 延後更新 」,意的 DELETE 成對地實作更新 / INSERT 作業。這個 「 延後的更新 」 會使複寫傳送一對 DELETE / 給 「 訂閱者的 INSERT 陳述式。另外還有其他可能會導致將延後的更新的情況。因此,在 UPDATE 觸發程序或在 「 訂閱者 」 的自訂預存程序中實作任何商務邏輯應該也包含在的 刪除 / INSERT 觸發程序或自訂的預存程序。
其他相關資訊
交易式複寫中的預設行為是使用 INSERTUPDATEDELETE 自訂的預存程序來套用在 「 訂閱者的變更。

在 「 發行者 」 所做的 INSERT 陳述式會套用到訂閱者透過一個 INSERT 預存程序呼叫。同樣地,DELETE 陳述式會套用透過 刪除 預存程序呼叫。

不過,時為一個 「 延後更新 」,logreader 代理程式位數一組的 DELETE 執行一個 UPDATE 陳述式 / INSERT 預存程序呼叫,會套用到 「 訂閱者 」,而不是更新散發資料庫中預存程序呼叫。比方說假設您有使用這三個資料行命名 TABLE1,一個發行資料表:
  • col1 int
  • col2 int
  • col3 varchar(30)。
上 TABLE1 只有唯一的條件約束定義在 col1 透過主索引鍵條件約束。假設您有一筆記錄 (1,1,' 達拉斯')。

當您執行這個程式碼:
UPDATE TABLE1 set col1 = 3 where col2 = 'Dallas'				
UPDATE 陳述式由 SQL Server 所實作的 DELETE 成對地 / 自您的 INSERT 陳述式正在更新具有已定義一個唯一索引的 col1。因此,logreader 會放置一對 DELETE / INSERT 呼叫在散發資料庫中。這可能會影響任何存在於觸發程序或在 「 訂閱者 」 的自訂預存程序的商務邏輯。您應該納入額外的商務邏輯,刪除插入 觸發程序或預存程序來處理這種情況中。

如果您想要使用單一的邏輯,而您想所有複寫為 DELETEUPDATE 命令 / INSERT 組您可以啟用追蹤旗標此 「 Microsoft 知識庫 」 文件中所述:
160181INF: 追蹤旗標來複寫 UPDATE 當做 DELETE/INSERT 組
此外,如果出版物中使用水平篩選並更新的資料列不符合篩選條件,只 刪除 程序呼叫傳送給 「 訂閱者]。如果更新的資料列之前不符合篩選條件,但更新後符合搜尋條件,只在 INSERT 程序呼叫是透過複寫程序傳送。

在前面的範例假設您也有 TABLE1 上定義的水平篩選器: 其中 col2 = '達拉斯'。如果您執行這個程式碼:
UPDATE table1 set col2 = 'New York' where col1 = 3				
刪除 一個預存程序呼叫,因為更新的資料列不符合水平篩選條件套用到訂閱者將 logreader 的代理程式唯一位置。

現在如果執行這個程式碼:
UPDATE table1 set col2 = 'Dallas' where col1 = 3				
僅因為資料列之前不符合篩選條件的 INSERT 預存程序呼叫時才會產生 logreader。

雖然執行在 「 發行者 」 的 UPDATE 作業,適當的指令會套用到 「 訂閱者 」。
参考
SQL Server 2000 Service Pack 1,或更新的版本中,請參閱下列文件 「 Microsoft 知識庫 」 中:
302341INF: 新的追蹤旗標以啟用單一更新交易式複寫

警告:本文為自動翻譯

內容

文章識別碼:238254 - 最後檢閱時間:05/12/2008 18:01:45 - 修訂: 6.2

Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2005 Workgroup Edition, Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition

  • kbmt kbinfo KB238254 KbMtzh
意見反應