如何:設定將資料變更傳播至交易式發行項的方法 (複寫 Transact-SQL 程式設計)
依預設,複寫會自動產生用來將變更傳播至訂閱者的預存程序。交易式複寫可讓您控制變更要如何從發行者傳播至訂閱者,而且在建立發行項時,可以透過程式設計方式設定此傳播方法,並在稍後使用複寫預存程序加以變更。
[!附註]
您可以針對發生在發行之資料列上的每一種類型的 DML (資料操作語言) 作業 (插入、更新或刪除) 指定不同的傳播方法。
如需詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
建立使用 Transact-SQL 命令的發行項來傳播資料變更
在發行集資料庫的發行者上,執行 sp_addarticle。針對 @publication 指定發行項所屬的發行集名稱、針對 @article 指定發行項名稱、針對 @source_object 指定發行的資料庫物件,以及至少針對下列其中一個參數指定 SQL 的值:
[!附註]
當針對以上任何參數指定 SQL 的值時,該類型的命令將會以適當的 Transact-SQL 命令形式複寫到訂閱者。
如需詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。
建立不會傳播資料變更的發行項
在發行集資料庫的發行者上,執行 sp_addarticle。針對 @publication 指定發行項所屬的發行集名稱、針對 @article 指定發行項名稱、針對 @source_object 指定發行的資料庫物件,以及至少針對下列其中一個參數指定 NONE 的值:
[!附註]
當針對以上任何參數指定 NONE 的值時,該類型的命令將不會複寫到訂閱者。
如需詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。
使用使用者修改的自訂預存程序建立發行項
在發行集資料庫的發行者上,執行 sp_addarticle。針對 @publication 指定發行項所屬的發行集名稱、針對 @article 指定發行項名稱、針對 @source_object 指定發行的資料庫物件、針對包含 0x02 值 (可自動產生自訂預存程序) 的 @schema_option 位元遮罩指定一個值,以及至少指定下列其中一個參數:
@ins_cmd - 指定 CALL sp_MSins_article_name 的值,其中 article_name 是針對 @article 指定的值。
@del_cmd - 指定 CALL sp_MSdel_article_name 或 XCALL sp_MSdel_article_name 的值,其中 article_name 是針對 @article 指定的值。
@upd_cmd - 指定 SCALL sp_MSupd_article_name、CALL sp_MSupd_article_name、XCALL sp_MSupd_article_name 或 MCALL sp_MSupd_article_name 的值,其中 article_name 是針對 @article 指定的值。
[!附註]
您可以針對上述的每一個命令參數,為複寫產生的預存程序指定您自己的名稱。
[!附註]
如需有關 CALL、SCALL、XCALL 和 MCALL 語法的詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
如需詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。
產生快照集之後,導覽至這個發行項所屬發行集的快照集資料夾,並尋找與該發行項同名的 .sch 檔。使用 Notepad.exe 開啟這個檔案,尋找插入、更新或刪除預存程序的 CREATE PROCEDURE 命令,然後編輯程序定義以便提供傳播資料變更所需的任何自訂邏輯。如需詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
警告 編輯複寫所產生的任何快照集檔案時必須特別小心。您必須在自訂預存程序中測試並支援自訂邏輯,因為 Microsoft 不會提供自訂邏輯支援。
使用自訂預存程序中的自訂指令碼建立發行項,以傳播資料變更
在發行集資料庫的發行者上,執行 sp_addarticle。針對 @publication 指定發行項所屬的發行集名稱、針對 @article 指定發行項名稱、針對 @source_object 指定發行的資料庫物件、針對包含 0x02 值 (可自動產生自訂預存程序) 的 @schema_option 位元遮罩指定一個值,以及至少指定下列其中一個參數:
@ins_cmd - 指定 CALL sp_MSins_article_name 的值,其中 article_name 是針對 @article 指定的值。
@del_cmd - 指定 CALL sp_MSdel_article_name 或 XCALL sp_MSdel_article_name 的值,其中 article_name 是針對 @article 指定的值。
@upd_cmd - 指定 SCALL sp_MSupd_article_name、CALL sp_MSupd_article_name、XCALL sp_MSupd_article_name、MCALL sp_MSupd_article_name 的值,其中 article_name 是針對 @article 指定的值。
[!附註]
您可以針對上述的每一個命令參數,為複寫產生的預存程序指定您自己的名稱。
[!附註]
如需有關 CALL、SCALL、XCALL 和 MCALL 語法的詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
如需詳細資訊,請參閱<如何:定義發行項 (複寫 Transact-SQL 程式設計)>。
在發行集資料庫的發行者上,使用 ALTER PROCEDURE 陳述式編輯 sp_scriptpublicationcustomprocs,好讓它針對插入、更新或刪除自訂預存程序傳回 CREATE PROCEDURE 指令碼。如需詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
警告 在編輯 sp_scriptpublicationcustomprocs 時必須要非常小心;您必須測試及支援此預存程序中的自訂邏輯。Microsoft 不支援自訂邏輯或是對系統預存程序的變更。
變更傳播現有發行項之變更的方法
在發行集資料庫的發行者上,執行 sp_changearticle。指定 @publication、@article,並針對 @property 指定 ins_cmd、upd_cmd、或 del_cmd 的值,以及針對 @value 指定適當的傳播方法。
針對要變更的每一個傳播方法重複步驟 1。