共用方式為


將資料變更的傳播方式設定為交易性文章

本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,為 SQL Server 2014 中交易式發行項的數據變更設定傳播方法。

根據預設,交易複製會使用每個文章的一組預存程式,將變更傳播至訂閱者。 您可以將這些程式取代為自訂程式。 如需詳細資訊,請參閱 指定交易式發行項的變更傳播方式

本主題內容

開始之前

限制與制約

  • 編輯復寫所產生的任何快照集檔案時,必須小心。 您必須在自訂預存程式中測試及支援自訂邏輯。 Microsoft不支援自定義邏輯。

使用 SQL Server Management Studio

在 [文章屬性 - <文章>] 對話方塊的 [屬性] 標籤上指定傳播方法,此對話框可在 [新增出版物精靈] 和 [出版物屬性 - <出版物>] 對話框中使用。 如需使用精靈及存取對話方塊的詳細資訊,請參閱建立發行集檢視及修改發行集屬性

若要指定傳播方法

  1. 在 [新增發行集精靈] 或 [> 對話方塊的 [文章 頁面] 上,選取資料表,然後按一下 [文章屬性]。

  2. 按一下 設定已反白的數據表文章的屬性

  3. 在 [發行項屬性 - <發行項] 對話方塊的 [發行項>屬性] 索引標籤上,於 [語句傳遞] 區段中,使用 INSERT 傳遞格式UPDATE 傳遞格式DELETE 傳遞格式功能表,為每個作業指定傳播方法。

  4. 按一下 [確定]

  5. 如果您在 [ 發行集屬性 - <發行集> ] 對話框中,請按兩下 [ 確定 ] 儲存並關閉對話框。

產生和使用自訂儲存程序

  1. 在 [新增發行集精靈] 或 [> 對話方塊的 [文章 頁面] 上,選取資料表,然後按一下 [文章屬性]。

  2. 按一下 設定已反白的數據表文章的屬性

    在 [發行項屬性 - 發行項] 對話方塊的 [發行項>屬性] < 索引標籤上,於 [語句傳遞] 區段中,從適當的傳遞格式功能表選取 CALL 語法(INSERT 傳遞格式UPDATE 傳遞格式或 DELETE 傳遞格式),然後輸入要用於 INSERT 預存程式DELETE 預存程式UPDATE 預存程式的程式名稱。 如需有關 CALL 語法的詳細資訊,請參閱 指定交易式發行項變更傳播方式中的「儲存程序的呼叫語法」一節。

  3. 按一下 [確定]

  4. 如果您在 [ 發行集屬性 - <發行集> ] 對話框中,請按兩下 [ 確定 ] 儲存並關閉對話框。

  5. 產生發行物的快照時,它會包含您在上一個步驟中所指定的程式。 程式會使用您指定的 CALL 語法,但會包含複寫所使用的預設邏輯。

    產生快照集之後,流覽至本文所屬發行集的快照集資料夾,並找出與發行項同名的 .sch 檔案。 使用記事本或其他文本編輯器開啟此檔案,找出插入、更新或刪除預存程式的 CREATE PROCEDURE 命令,並編輯程式定義,以提供任何自定義邏輯來傳播數據變更。 如果重新產生快照集,您必須重新建立自訂程序。

使用 Transact-SQL

事務複製可讓您控制從發行者傳播至訂閱者變更的方式,此傳播方法可在建立發行項時以程式設計方式設定,並可以在稍後使用複寫預存程式進行變更。

備註

您可以針對在已發佈資料列上發生的每一種 DML(資料作語言)作業(插入、更新或刪除)指定不同的傳播方法。

如需詳細資訊,請參閱 指定交易式發行項的變更傳播方式

建立一篇使用 Transact-SQL 命令來傳播資料變更的文章

  1. 在發行集資料庫的發行者上,執行 sp_addarticle。 指定文章所屬出版物的名稱為 @publication,文章的名稱為 @article,發行的資料庫物件為 @source_object,以及至少其中一個下列參數的值為 SQL

    • @ins_cmd - 控制 INSERT 命令的複寫。

    • @upd_cmd - 控制 UPDATE 命令的複寫。

    • @del_cmd - 控制 DELETE 命令的複寫。

    備註

    當為上述任何參數指定 SQL 值時,該類型的命令將會複製到訂閱者,作為適當的 Transact-SQL 命令。

    如需詳細資訊,請參閱 定義發行項

建立一篇不會引發數據變動的文章

  1. 在發行集資料庫的發行者上,執行 sp_addarticle。 指定文章所屬的出版物的名稱為 @publication,文章的名稱為 @article,出版的資料庫物件為 @source_object,以及至少下列其中一個參數的值為 NONE

    • @ins_cmd - 控制 INSERT 命令的複寫。

    • @upd_cmd - 控制 UPDATE 命令的複寫。

    • @del_cmd - 控制 DELETE 命令的複寫。

    備註

    為上述任何參數指定 NONE 值時,該類型的命令將不會復寫到訂閱者。

    如需詳細資訊,請參閱 定義發行項

使用經使用者更改的自訂儲存程序建立文章

  1. 在發行集資料庫的發行者上,執行 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_nameXCALL sp_MSdel_article_name的值,其中 article_name 是針對 _*@article** 指定的值。

    • @upd_cmd - 指定 SCALL sp_MSupd_article_nameCALL sp_MSupd_article_nameXCALL sp_MSupd__article_name*或 MCALL sp_MSupd_article_name的值,其中 article_name 是針對 @article 指定的值。

    備註

    針對上述每個命令參數,您可以為複寫產生的預存程式指定您自己的名稱。

    備註

    如需 CALL、SCALL、XCALL 和 MCALL 語法的詳細資訊,請參閱 指定交易式發行項的變更傳播方式

    如需詳細資訊,請參閱 定義發行項

  2. 產生快照集之後,流覽至本文所屬發行集的快照集資料夾,並找出與發行項同名的 .sch 檔案。 使用 Notepad.exe開啟此檔案,找出插入、更新或刪除預存程式的 CREATE PROCEDURE 命令,並編輯程式定義,以提供任何自定義邏輯來傳播數據變更。 如需詳細資訊,請參閱 指定交易式發行項的變更傳播方式

若要在自定義預存程式中建立具有自定義腳本的文章,以傳播數據變更

  1. 在發行集資料庫的發行者上,執行 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_nameXCALL sp_MSdel_article_name的值,其中 article_name 是針對 @article 指定的值。

    • @upd_cmd - 指定 SCALL sp_MSupd_article_nameCALL sp_MSupd_article_nameXCALL sp_MSupd_article_name、MCALL sp_MSupd_article_name的值,其中 article_name 是針對 @article 指定的值。

    備註

    針對上述每個命令參數,您可以為複寫產生的預存程式指定您自己的名稱。

    備註

    如需了解 CALL、SCALL、XCALL 和 MCALL 語法的更多資訊,請參閱 指定交易式發行項的變更傳播方式

    如需詳細資訊,請參閱 定義發行項

  2. 在發行集資料庫的發行者端,使用 ALTER PROCEDURE 語句編輯 sp_scriptpublicationcustomprocs ,以便傳回插入、更新和刪除自定義預存程式的 CREATE PROCEDURE 腳本。 如需詳細資訊,請參閱 指定交易式發行項的變更傳播方式

變更既有文章更動的傳播方式

  1. 在出版資料庫的發行者處,執行 sp_changearticle。 指定 @publication@article,為 @property 指定 ins_cmdupd_cmddel_cmd 的值,並為 @value 指定合適的傳播方法。

  2. 針對要變更的每個傳播方法重複步驟 1。

另請參閱

指定交易式發行項的變更傳播方式
建立發行集