適用於:SQL Server
、Azure SQL 受控執行個體
本主題說明如何使用 SQL Server Management Studio (SSMS) 或 Transact-SQL 在 SQL Server 中設定交易式發行項資料變更的傳播方法。
預設情況下,交易式複寫會針對每個發行項目使用一組預存程序,將變更傳播到訂閱者。 您也可以使用自訂程序取代這些程序。 如需詳細資訊,請參閱指定交易式發行項變更的傳播方式。
開始之前
限制與限制條件
- 編輯複寫所產生的任何快照集檔案時必須特別小心。 在自訂預存程序中測試並支援自訂邏輯。 Microsoft 不會為自訂邏輯提供支援。
使用 SQL Server Management Studio
在 [文章屬性 - <文章>] 對話方塊的 [屬性] 索引標籤上指定傳播方法;此對話方塊可在 [新增發行集精靈] 和 [發行集屬性 - <發行集>] 對話方塊中使用。 如需使用精靈及存取對話方塊的詳細資訊,請參閱建立發行集和檢視及修改發行集屬性。
指定傳遞方法
在 [新增發行集精靈] 或 [發行集屬性 - 發行集<] 對話方塊的 [發行項] 頁面中選取一個資料表,然後點選 [發行項屬性]。
選取 設定已醒目提示的資料表文章屬性。
在 屬性 索引標籤的 「文章屬性 - <文章>」 對話方塊中,於 陳述式傳遞 區段內,使用 INSERT 傳遞格式、UPDATE 傳遞格式 和 DELETE 傳遞格式 功能表,指定每項作業的傳播方法。
選取 確定。
如果您在 [發行集屬性 - <發行集>] 對話方塊中,請點選 [確定] 以儲存並關閉對話方塊。
產生及使用自訂預存程序
在 [新增發行集精靈] 的 發行項 頁面上,或在 發行集屬性 - <發行集> 對話方塊中,選取資料表,然後選取 發行項屬性。
選取 設定反白顯示之資料表文章的屬性。
在 「Article Properties - <Article>」對話方塊的 「屬性」 索引標籤上,於 「陳述式傳遞」 區段中,從適當的傳遞格式功能表(INSERT傳遞格式、UPDATE傳遞格式 或 DELETE傳遞格式)選取 CALL 語法,然後在 INSERT預存程序、DELETE預存程序 或 UPDATE預存程序 中輸入要使用的程序名稱。 如需 CALL 語法的詳細資訊,請參閱指定交易式發行項變更的傳播方式中的<預存程序的 Call 語法>一節。
選取 確定。
如果您在 [發行集屬性 - <發行集>] 對話方塊中,請點選 [確定] 以儲存並關閉對話方塊。
產生發行的快照時,將會包含您在前一個步驟中指定的程序。 這些程序將使用您指定的 CALL 語法,但是會包含複寫使用的預設邏輯。
產生快照集之後,導覽至這個發行項所屬發行集的快照集資料夾,並尋找與該發行項同名的 .sch 檔。 使用記事本或其他文字編輯器開啟此檔案,找到 CREATE PROCEDURE 插入、更新或刪除儲存程序的指令,並編輯程序定義以提供任何用於傳播資料變更的自訂邏輯。 如果快照已重新產生,您必須重新建立自訂程序。
使用 TRANSACT-SQL
異動複寫可讓您控制變更要如何從發行者傳播至訂閱者,而且在建立發行項時,可以透過程式設計方式設定此傳播方法,並在稍後使用複寫預存程序加以變更。
注意
您可以針對發生在發行之資料列上的每一種類型的 DML (資料操作語言) 作業 (插入、更新或刪除) 指定不同的傳播方法。
如需詳細資訊,請參閱指定交易式發行項變更的傳播方式。
建立使用 Transact-SQL 命令來傳播資料變更的文章
在發行者的發行資料庫上,執行 sp_addarticle。 針對 @publication指定發行項所屬的發行集名稱、針對 @article指定發行項名稱、針對 @source_object指定發行的資料庫物件,以及至少針對下列其中一個參數指定 SQL 的值:
注意
為以上任何參數指定 SQL 的值後,該類型的命令會以適當的 Transact-SQL 命令形式複寫至訂閱者。
如需詳細資訊,請參閱 定義發行項。
建立不傳播資料變更的文章
在發行集資料庫的發行者上,執行 sp_addarticle。 針對 @publication指定發行項所屬的發行集名稱、針對 @article指定發行項名稱、針對 @source_object指定發行的資料庫物件,以及至少針對下列其中一個參數指定 NONE 的值:
注意
當針對以上任何參數指定 NONE 的值時,該類型的命令將不會複寫到訂閱者。
如需詳細資訊,請參閱 定義發行項。
使用使用者修改的自訂預存程序建立發行項
在發行集資料庫的發行者上,執行 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 語法的詳細資訊,請參閱指定交易式發行項變更的傳播方式。
如需詳細資訊,請參閱 定義發行項。
產生快照集之後,導覽至這個發行項所屬發行集的快照集資料夾,並尋找與該發行項同名的 .sch 檔。 使用 Notepad.exe開啟此檔案,找到插入、更新或刪除儲存程序的指令, CREATE PROCEDURE 並編輯程序定義以提供任何用於傳播資料變更的自訂邏輯。 如需詳細資訊,請參閱指定交易式發行項變更的傳播方式。
在自訂預存程序中使用自訂指令碼建立發行項,以傳播資料變更
在發行集資料庫的發行者上,執行 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 語法的詳細資訊,請參閱指定交易式發行項變更的傳播方式。
如需詳細資訊,請參閱 定義發行項。
在發行者的發行集資料庫上,使用 ALTER PROCEDURE 陳述式來編輯 sp_scriptpublicationcustomprocs,使其傳回用於插入、更新和刪除自訂預存程序的 CREATE PROCEDURE 指令碼。 如需詳細資訊,請參閱指定交易式發行項變更的傳播方式。
變更傳播現有發行項之變更的方法
在發行者上的發行資料庫中,執行 sp_changearticle。 指定 @publication、 @article,並針對 @property指定 ins_cmd、 upd_cmd 、或 del_cmd的值,以及針對 @value指定適當的傳播方法。
針對要變更的每一個傳播方法重複步驟 1。