sp_changemergearticle (Transact-SQL)

更新: 2006 年 4 月 14 日

變更合併發行項的屬性。這個預存程序執行於發行集資料庫的發行者端。

主題連結圖示Transact-SQL 語法慣例

語法

sp_changemergearticle [ @publication = ] 'publication'
        , [ @article = ] 'article'
    [ , [ @property = ] 'property' ]
    [ , [ @value = ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]

引數

  • [ @publication=] 'publication'
    這是發行項所在發行集的名稱。publicationsysname,沒有預設值。
  • [ @article=] 'article'
    這是要變更的發行項名稱。articlesysname,沒有預設值。
  • [ @property=] 'property'
    這是給定發行項和發行集要變更的屬性。propertynvarchar(30),它可以是下表列出的值之一。
  • [ @value=] 'value'
    這是指定屬性的新值。valuenvarchar(1000),它可以是下表列出的值之一。

    下表描述發行項的屬性及這些屬性的值。

    屬性

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    認可這個預存程序所採取的動作可能使現有的快照集失效。force_invalidate_snapshotbit,預設值是 0

    0 指定合併發行項的變更不會使快照集失效。如果預存程序偵測到變更需要新的快照集,就會發生錯誤,且不會進行任何變更。

    1 表示合併發行項的變更可能使快照集失效,如果有現有的訂閱需要新的快照集,便提供要標示為已棄用之現有快照集的權限,此時會產生新的快照集。

    請參閱<備註>一節,以瞭解在變更時需要產生新快照集的屬性。

  • [ @force_reinit_subscription = ] force_reinit_subscription
    認可這個預存程序所採取的動作可能需要重新初始化現有的訂閱。force_reinit_subscriptionbit,預設值是 0

    0 指定合併發行項的變更不會使訂閱重新初始化。如果預存程序偵測到變更需要重新初始化現有的訂閱,就會發生錯誤,且不會進行任何變更。

    1 表示合併發行項的變更會使現有的訂閱重新初始化,且會提供將發生之訂閱重新初始化的權限。

    請參閱<備註>一節,以瞭解在變更時需要重新初始化所有現有的訂閱之屬性。

傳回碼值

0 (成功) 或 1 (失敗)

備註

sp_changemergearticle 用於合併式複寫中。

由於 sp_changemergearticle 是用來變更發行項屬性,這些發行項屬性開始時是利用 sp_addmergearticle 所指定的,因此,如需這些屬性的其他資訊,請參閱<sp_addmergearticle>。

變更下列屬性需要產生新的快照集,而且您必須指定值 1force_invalidate_snapshot 參數:

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_cmd
  • schema_options
  • subset_filterclause

變更下列屬性需要重新初始化現有的訂閱,而且您必須指定值 1force_reinit_subscription 參數:

  • check_permissions
  • column_tracking
  • destination_owner
  • subscriber_upload_options
  • subset_filterclause

partition_options 指定的值是 3 時,每當合併代理程式執行時,都會清除中繼資料,資料分割快照集也會到期得更快。當使用這個選項時,您應該考慮啟用訂閱者要求的資料分割快照集。如需詳細資訊,請參閱<含參數化篩選之合併式發行集的快照集>。

當設定 column_tracking 屬性時,如果資料表已發行在其他合併式發行集中,資料行追蹤就必須與依據這份資料表的現有發行項所用的值相同。這個參數只適用於資料表發行項。

如果多個發行集根據相同的基礎資料表來發行發行項,變更 delete_tracking 屬性或發行項的 compensate_for_errors 屬性,會使基於相同資料表的其他發行項也進行相同的變更。

如果合併處理序所使用的發行者登入/使用者帳戶並沒有正確的資料表權限,就會將無效的變更記錄為衝突。

當變更 schema_option 的值時,系統不會執行位元更新。這表示當您利用 sp_changemergearticle 來設定 schema_option 時,可能會關閉現有的位元設定。若要保留現有的設定,應該在您設定的值和 schema_option 目前的值 (可以執行 sp_helpmergearticle 來判斷它的值) 之間執行 & (位元 AND)

有效的結構描述選項表

下表描述允許使用的 schema_option 值,這會隨著發行項類型而不同。

發行項類型 結構描述選項值

func schema only

0x010x2000

indexed view schema only

0x010x0400x01000x20000x400000x10000000x200000

proc schema only

0x010x2000

table

所有選項。

view schema only

0x010x0400x01000x20000x400000x10000000x200000

權限

只有系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員,才能夠執行 sp_changemergearticle

範例

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

請參閱

參考

sp_addmergearticle (Transact-SQL)
sp_dropmergearticle (Transact-SQL)
sp_helpmergearticle (Transact-SQL)
複寫預存程序 (Transact-SQL)

其他資源

How to: View and Modify Article Properties (Replication Transact-SQL Programming)
變更發行集與發行項屬性

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

變更的內容:
  • 更新 schema_option 屬性 0x20000000 值的描述。

2005 年 12 月 5 日

新增內容:
  • 記載針對 schema_option 參數設定 0x20 選項時的其他限制。
變更的內容:
  • 更新資料表發行項之預設結構描述選項值的資訊。