預設情況下,事務性複製會透過發行項中每個資料表條目的內部程序所產生的預存程序,在訂閱伺服器上進行所有資料變更。 這三個程式(每一個用於插入、更新和刪除)會複製到訂閱者,並在插入、更新或刪除複寫至訂閱者時執行。 對 SQL Server 發行者上的數據表進行架構變更時,複寫會藉由呼叫同一組內部腳本程式自動重新產生這些程式,讓新程式符合新的架構(Oracle 發行者不支援架構變更的復寫)。
您也可以指定自訂程式來取代一或多個預設程式。 如果架構變更會影響程式,則應該變更自定義程式。 例如,如果程序參考在架構變更中被刪除的欄位,則應從程序中移除該欄位的參考。 複寫可透過兩種方式將新的自訂的程序傳播給訂閱者:
第一個選項是使用自訂文稿程式來取代複寫所使用的預設值:
執行 sp_addarticle (Transact-SQL)時,請確定 @schema_option 0x02位為 true。
執行 sp_register_custom_scripting (Transact-SQL), 並針對參數 @type 指定 'insert'、'update' 或 'delete' 的值,以及參數 @value的自定義腳本程序名稱。
當模式更改時,複寫會呼叫此預存程序以生成新使用者自訂預存程序的定義,然後將該程序分發至每位訂閱者。
第二個選項是使用包含新自訂程式定義的文稿:
執行 sp_addarticle (Transact-SQL)時,將 @schema_option 0x02 位設定為 false ,因此復寫不會在訂閱者端自動產生自定義程式。
在每個架構變更之前,請先建立新的腳本檔案,並執行 sp_register_custom_scripting(Transact-SQL) 來將腳本註冊到複寫系統。 為參數 @type 指定 『custom_script』 的值,併為參數 @value指定 Publisher 上腳本的路徑。
在每次更動相關結構描述時,此指令碼會在相同的交易中執行於每個「訂閱者」,與 DDL 命令同步執行。 架構更改後,指令碼將被取消註冊。 您必須重新註冊腳本,讓腳本在後續的架構變更之後執行。