sp_addmergearticle (Transact-SQL)

更新: 2006 年 4 月 14 日

將發行項加入現有的合併式發行集中。這個預存程序執行於發行集資料庫的發行者端。

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

語法

sp_addmergearticle [ @publication = ] 'publication' 
        , [ @article = ] 'article' 
        , [ @source_object = ] 'source_object' 
    [ , [ @type = ] 'type' ] 
    [ , [ @description = ] 'description' ] 
    [ , [ @column_tracking = ] 'column_tracking' ] 
    [ , [ @status = ] 'status' ] 
    [ , [ @pre_creation_cmd = ] 'pre_creation_cmd' ] 
    [ , [ @creation_script = ] 'creation_script' ] 
    [ , [ @schema_option = ] schema_option ] 
    [ , [ @subset_filterclause = ] 'subset_filterclause' ] 
    [ , [ @article_resolver = ] 'article_resolver' ] 
    [ , [ @resolver_info = ] 'resolver_info' ] 
    [ , [ @source_owner = ] 'source_owner' ] 
    [ , [ @destination_owner = ] 'destination_owner' ] 
    [ , [ @vertical_partition = ] 'vertical_partition' ] 
    [ , [ @auto_identity_range = ] 'auto_identity_range' ] 
    [ , [ @pub_identity_range = ] pub_identity_range ] 
    [ , [ @identity_range = ] identity_range ] 
    [ , [ @threshold = ] threshold ] 
    [ , [ @verify_resolver_signature = ] verify_resolver_signature ] 
    [ , [ @destination_object = ] 'destination_object' ] 
    [ , [ @allow_interactive_resolver = ] 'allow_interactive_resolver' ] 
    [ , [ @fast_multicol_updateproc = ] 'fast_multicol_updateproc' ] 
    [ , [ @check_permissions = ] check_permissions ] 
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @published_in_tran_pub = ] 'published_in_tran_pub' ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @logical_record_level_conflict_detection = ] 'logical_record_level_conflict_detection' ]
    [ , [ @logical_record_level_conflict_resolution = ] 'logical_record_level_conflict_resolution' ]
    [ , [ @partition_options = ] partition_options ]
    [ , [ @processing_order = ] processing_order ]
    [ , [ @subscriber_upload_options = ] subscriber_upload_options ]
    [ , [ @identityrangemanagementoption = ] 'identityrangemanagementoption' ]
    [ , [ @delete_tracking = ] delete_tracking ]
    [ , [ @compensate_for_errors = ] 'compensate_for_errors' ] 
    [ , [ @stream_blob_columns = ] 'stream_blob_columns' ]

引數

  • [ @publication= ] 'publication'
    這是包含發行項之發行集的名稱。publicationsysname,沒有預設值。
  • [ @article= ] 'article'
    這是發行項的名稱。這個名稱在發行集內必須是唯一的。articlesysname,沒有預設值。article 必須在執行 Microsoft SQL Server 的本機電腦上,且必須符合識別碼規則。
  • [ @source_object= ] 'source_object'
    這是要發行的資料庫物件。source_objectsysname,沒有預設值。如需有關能夠利用合併式複寫來發行之物件類型的詳細資訊,請參閱<發行資料和資料庫物件>。
  • [ @type= ] 'type'
    這是發行項的類型。typesysname,預設值為 table,而且可以是下列值之一。

    描述

    table (預設值)

    含結構描述和資料的資料表。複寫會監視資料表來判斷要複寫的資料。

    func schema only

    只含結構描述的函數。

    indexed view schema only

    只含結構描述的索引檢視。

    proc schema only

    僅限結構描述的預存程序。

    synonym schema only

    僅限結構描述的同義字。

    view schema only

    只含結構描述的檢視。

  • [ @description= ] 'description'
    這是發行項的描述。descriptionnvarchar(255),預設值是 NULL。
  • [ @column_tracking= ] 'column_tracking'
    這是資料行層級追蹤的設定。column_trackingnvarchar(10),預設值是 FALSE。true 會開啟資料行追蹤。false 會關閉資料行追蹤,將衝突偵測保留在資料列層級。如果資料表已發行在其他合併式發行集中,您必須使用依據這份資料表之現有發行項所使用的相同資料行追蹤值。這個參數只適用於資料表發行項。

    ms174329.note(zh-tw,SQL.90).gif附註:
    如果使用資料列追蹤執行衝突偵測 (預設值),基底資料表最多可以包含 1,024 個資料行,但必須從發行項篩選資料行,以便發行最多 246 個資料行。如果使用資料行追蹤,則基底資料表可包括的資料行數上限為 246。如需有關追蹤層級的詳細資訊,請參閱<合併式複寫如何偵測並解決衝突>的<追蹤層級>一節。
  • [ @status= ] 'status'
    這是發行項的狀態。statusnvarchar(10),預設值是 unsynced。如果是 active,便執行發行資料表的初始處理指令碼。如果是 unsynced,便在下次執行快照集代理程式時,執行發行資料表的初始處理指令碼。
  • [ @pre_creation_cmd= ] 'pre_creation_cmd'
    指定在套用快照集時,如果資料表存在於訂閱者,系統要採取什麼動作。pre_creation_cmdnvarchar(10),而且可以是下列值之一。

    描述

    none

    如果訂閱者端已有資料表,就不會採取任何動作。

    delete

    根據子集篩選中的 WHERE 子句來發出一項刪除。

    drop (預設值)

    在重新建立資料表之前,先卸除資料表。支援 Microsoft SQL Server 2005 Compact Edition 訂閱者需要這個值。

    truncate

    截斷目的地資料表。

  • [ @creation_script= ] 'creation_script'
    這是在訂閱資料庫中,用來建立發行項的選擇性發行項結構描述指令碼的路徑和名稱。creation_scriptnvarchar(255),預設值是 NULL。

    ms174329.note(zh-tw,SQL.90).gif附註:
    建立指令碼並非執行於 SQL Server 2005 Compact Edition 訂閱者。
  • [ @schema_option= ] schema_option
    這是給定的發行項之結構描述產生選項的點陣圖。schema_optionbinary(8),而且可以是一或多個這些值的 | (位元 OR) 結果。

  • [ @subset_filterclause= ] 'subset_filterclause'
    這是一個 WHERE 子句,指定資料表發行項的水平篩選,但不含 WHERE 一字。subset_filterclausenvarchar(1000),預設值是空字串。

    ms174329.note(zh-tw,SQL.90).gif重要事項:
    基於效能的考量,建議您不要在參數化資料列篩選子句中的資料行名稱套用函數,例如 LEFT([MyColumn]) = SUSER_SNAME()。如果您在篩選子句中使用 HOST_NAME,且覆寫了 HOST_NAME 值,您可能需要利用 CONVERT 來轉換資料類型。如需有關此案例之最佳作法的詳細資訊,請參閱<參數化資料列篩選>中的<覆寫 HOST_NAME() 值>一節。
  • [ @article_resolver= ] 'article_resolver'
    這是以 COM 為基礎的解析程式,用來解決資料表發行項的衝突,或為了在資料表發行項上執行自訂商務邏輯而呼叫之 .NET Framework 組件的衝突。article_resolvervarchar(255),預設值是 NULL。這個參數可用的值列在 Microsoft 自訂解析程式中。如果提供的值不是 Microsoft 解析程式之一,SQL Server 會利用指定的解析程式來取代系統提供的解析程式。請利用 sp_enumcustomresolvers 來列舉可用自訂解析程式的清單。如需詳細資訊,請參閱<在合併同步處理期間執行商務邏輯>和<進階合併式複寫衝突偵測與解決>。
  • [ @resolver_info= ] 'resolver_info'
    這用來指定自訂解析程式所需要的其他資訊。部分 Microsoft 解析程式需要用來當做解析程式輸入的資料行。resolver_infonvarchar(255),預設值是 NULL。如需詳細資訊,請參閱<以 COM 為基礎的 Microsoft 解析程式>。
  • [ @source_owner= ] 'source_owner'
    這是 source_object 擁有者的名稱。source_ownersysname,預設值是 NULL。如果是 NULL,就假設目前使用者是擁有者。
  • [ @destination_owner= ] 'destination_owner'
    如果不是 'dbo',這便是訂閱資料庫中之物件的擁有者。destination_ownersysname,預設值是 NULL。如果是 NULL,就假設 'dbo' 是擁有者。
  • [ @vertical_partition= ] 'column_filter'
    在資料表發行項上,啟用和停用資料行的篩選。vertical_partitionnvarchar(5),預設值是 FALSE。

    false 表示沒有垂直篩選,會發行所有資料行。

    true 會清除已宣告的主索引鍵和 ROWGUID 資料行之外的所有資料行。資料行是利用 sp_mergearticlecolumn 來加入的。

  • [ @auto_identity_range= ] 'automatic_identity_range'
    在發行集建立之時,在發行集上啟用和停用這個資料表發行項的自動識別範圍處理。auto_identity_rangenvarchar(5),預設值是 FALSE。true 會啟用自動識別範圍處理,false 會停用它。

    ms174329.note(zh-tw,SQL.90).gif附註:
    auto_identity_range 已被取代,提供這個項目的目的,只是為了與舊版相容。您應該利用 identityrangemanagementoption 來指定識別範圍管理選項。如需詳細資訊,請參閱<複寫識別資料行>。
  • [ @pub_identity_range= ] pub_identity_range
    控制使用自動識別範圍管理時,利用伺服器訂閱配置給訂閱者的識別範圍大小。這個識別範圍保留供重新發行訂閱者配置給自己的訂閱者。pub_identity_rangebigint,預設值是 NULL。如果 identityrangemanagementoptionauto 或是 auto_identity_rangetrue,您必須指定這個參數。
  • [ @identity_range= ] identity_range
    控制使用自動識別範圍管理時,配置給發行者和訂閱者的識別範圍大小。identity_rangebigint,預設值是 NULL。如果 identityrangemanagementoptionauto 或是 auto_identity_rangetrue,您必須指定這個參數。

    ms174329.note(zh-tw,SQL.90).gif附註:
    identity_range 會控制利用舊版 SQL Server 來重新發行訂閱者時的識別範圍大小。
  • [ @threshold= ] threshold
    這是一個百分比值,用來控制合併代理程式指派新識別範圍的時機。當使用 threshold 指定的百分比值時,合併代理程式會建立新的識別範圍。thresholdint,預設值是 NULL。如果 identityrangemanagementoptionauto 或是 auto_identity_rangetrue,您必須指定這個參數。
  • [ @verify_resolver_signature= ] verify_resolver_signature
    指定在合併式複寫中使用解析程式之前,是否要驗證數位簽章。verify_resolver_signatureint,預設值是 1。

    0 指定不驗證簽章。

    1 指定將驗證簽章來瞭解它是否來自信任來源。

  • [ @destination_object= ] 'destination_object'
    這是訂閱資料庫中的物件名稱。destination_objectsysname,預設值為 @source_object 中的值。只有在這個發行項是僅限結構描述的發行項 (如預存程序、檢視和 UDF) 時,才能指定這個參數。如果指定的發行項是資料表發行項,則 @source_object 中的值會覆寫 destination_object 中的值。
  • [ @allow_interactive_resolver= ] 'allow_interactive_resolver'
    啟用或停用發行項的互動解析程式。allow_interactive_resolvernvarchar(5),預設值是 FALSE。true 會啟用發行項的互動解析程式;false 會停用它。

    ms174329.note(zh-tw,SQL.90).gif附註:
    SQL Server 2005 Compact Edition 訂閱者不支援互動解析程式。
  • [ @fast_multicol_updateproc= ] 'fast_multicol_updateproc'
    這個參數已被取代,維護它的目的,只是為了與舊版的指令碼相容。
  • [ @check_permissions= ] check_permissions
    這是合併代理程式將變更套用在發行者時,所驗證之資料表層級權限的點陣圖。如果合併處理序所使用的發行者登入/使用者帳戶並沒有正確的資料表權限,就會將無效的變更記錄為衝突。check_permissionsint,它可以是一或多個下列值的 | (位元 OR) 結果。

    描述

    0x00 (預設值)

    不檢查權限。

    0x10

    先在發行者端檢查權限,之後才能上載在訂閱者端進行的插入作業。

    0x20

    先在發行者端檢查權限,之後才能上載在訂閱者端進行的更新作業。

    0x40

    先在發行者端檢查權限,之後才能上載在訂閱者端進行的刪除作業。

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

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

    1 指定加入發行項可能使快照集失效,如果有現有的訂閱需要新的快照集,便提供要標示為已棄用之現有快照集的權限,此時會產生新的快照集。將發行項加入含有現有快照集的發行集時,force_invalidate_snapshot 會設為 1

  • [ @published_in_tran_pub= ] 'published_in_tran_pub'
    指出合併式發行集中的發行項也在交易式發行集中發行。published_in_tran_pubnvarchar(5),預設值是 FALSE。true 指定發行項也在交易式發行集中發行。
  • [ @force_reinit_subscription= ] force_reinit_subscription
    認可這個預存程序所採取的動作可能需要重新初始化現有的訂閱。force_reinit_subscriptionbit,預設值是 0。

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

    1 表示對合併發行項的變更會導致現有的訂閱重新初始化,並且提供重新初始化訂閱的權限。當 subset_filterclause 指定參數化資料列篩選時,force_reinit_subscription 會設定為 1

  • [ @logical_record_level_conflict_detection= ] 'logical_record_level_conflict_detection'
    指定本身是邏輯記錄成員的發行項之衝突偵測層級。logical_record_level_conflict_detectionnvarchar(5),預設值是 FALSE。

    true 指定如果在邏輯記錄的任何位置進行變更,便會偵測到衝突。

    false 指定依照 column_tracking 所指定的方式來使用預設衝突偵測。如需詳細資訊,請參閱<使用邏輯記錄分組相關資料列的變更>。

    ms174329.note(zh-tw,SQL.90).gif附註:
    由於 SQL Server 2005 Compact Edition 訂閱者不支援邏輯記錄,所以您必須針對 logical_record_level_conflict_detection 指定 false 值,才能夠支援這些訂閱者。
  • [ @logical_record_level_conflict_resolution= ] 'logical_record_level_conflict_resolution'
    指定本身是邏輯記錄成員的發行項之衝突解決層級。logical_record_level_conflict_resolutionnvarchar(5),預設值是 FALSE。

    true 指定用整個優先邏輯記錄來覆寫遺失的邏輯記錄。

    false 指定優先資料列不限於邏輯記錄。如果 logical_record_level_conflict_detectiontrue,則 logical_record_level_conflict_resolution 必須也設定為 true。如需詳細資訊,請參閱<使用邏輯記錄分組相關資料列的變更>。

    ms174329.note(zh-tw,SQL.90).gif附註:
    由於 SQL Server 2005 Compact Edition 訂閱者不支援邏輯記錄,所以您必須針對 logical_record_level_conflict_resolution 指定 false 值,才能夠支援這些訂閱者。
  • [ @partition_options= ] partition_options
    定義發行項資料進行資料分割的方式,當所有資料列只屬於單一資料分割或單一訂閱時,能夠使效能最佳化。partition_optionstinyint,而且可以是下列其中一個值。

    描述

    0 (預設值)

    發行項的篩選是靜態的,或不產生每個資料分割的唯一資料子集;也就是說,它是一個「重疊」的資料分割。

    1

    資料分割重疊,在訂閱者端進行的資料操作語言 (DML) 更新並不會變更資料列所屬的資料分割。

    2

    發行項的篩選會產生非重疊的資料分割,但多個訂閱者可以接收相同的資料分割。

    3

    發行項的篩選會產生對每項訂閱而言都是唯一的非重疊資料分割。

    ms174329.note(zh-tw,SQL.90).gif附註:
    如果發行項的來源資料表已在另一個發行集中發行,則兩個發行項的 partition_options 值必須相同。
  • [ @processing_order= ] processing_order
    指出合併式發行集中之發行項的處理順序。processing_orderint,預設值是 0。0 指定發行項不排序,任何其他值都代表這個發行項之處理順序的序數值。發行項會依照從最低值到最高值的順序來處理。如果兩個發行項有相同的值,處理順序便取決於 sysmergearticles 系統資料表中的發行項暱稱順序。如需詳細資訊,請參閱<指定合併發行項的處理順序>。
  • [ @subscriber_upload_options= ] subscriber_upload_options
    定義客訂閱在訂閱者端進行的更新之限制。如需詳細資訊,請參閱<使用僅限下載的發行項最佳化合併式複寫效能>。subscriber_upload_optionstinyint,而且可以是下列其中一個值。

    描述

    0 (預設值)

    無限制。在訂閱者端進行的變更會上載到發行者

    1

    允許在訂閱者端進行變更;但它們不會上載到發行者。

    2

    不允許在訂閱者端進行變更。

    ms174329.note(zh-tw,SQL.90).gif附註:
    如果發行項的來源資料表已在另一個發行集中發行,則兩個發行項的 subscriber_upload_options 值必須相同。
  • [ @identityrangemanagementoption= ] identityrangemanagementoption
    指定如何處理發行項的識別範圍管理。identityrangemanagementoptionnvarchar(10),而且可以是下列其中一個值。

    描述

    none

    停用識別範圍的管理。

    manual

    利用 NOT FOR REPLICATION 來標示識別資料行,以啟用手動的識別範圍處理。

    auto

    指定自動管理識別範圍。

    NULL (預設值)

    auto_identity_range 值不是 true 時,預設為 none

    為了與舊版相容,當 identityrangemanagementoption 值是 NULL 時,會檢查 auto_identity_range 值。不過,當 identityrangemanagementoption 值不是 NULL 時,則會忽略 auto_identity_range 值。如需詳細資訊,請參閱<複寫識別資料行>。

  • [ @delete_tracking= ] 'delete_tracking'
    指出是否複寫刪除。delete_trackingnvarchar(5),預設值是 TRUE。false 表示不複寫刪除,true 表示複寫刪除 (這對合併式複寫而言是很平常的行為)。當 delete_tracking 設為 false 時,您必須在發行者端手動移除在訂閱者端刪除的資料列,在訂閱者端手動移除在發行者端刪除的資料列。

    ms174329.note(zh-tw,SQL.90).gif重要事項:
    delete_tracking 設為 false 會無法聚合。如果發行項的來源資料表已在另一個發行集中發行,則兩個發行項的 delete_tracking 值必須相同。
    ms174329.note(zh-tw,SQL.90).gif附註:
    不能使用「新增發行集精靈」或 [發行集屬性] 對話方塊設定 delete_tracking 選項。
  • [ @compensate_for_errors= ] 'compensate_for_errors'
    指出在同步處理期間發現錯誤時,是否採取補償動作。compensate_for_errors invarchar(5),預設值是 FALSE。當設為 true 時,訂閱者或發行者在同步處理期間所無法套用的變更,一律會使補償動作恢復變更;不過,設定不正確因而會產生錯誤的訂閱者,可能會恢復其他訂閱者和發行者所進行的變更。false 會停用這些補償動作,不過,錯誤仍會記錄成含有補償,後續的合併會繼續試圖套用變更,直到成功為止。

    ms174329.note(zh-tw,SQL.90).gif附註:
    如果是在執行 Microsoft SQL Server 2000 8.00.858 版和更早版本 (包括 SP3) 的訂閱者端提取訂閱,即使 compensate_for_errors 設為 false,仍會發生補償動作。
    ms174329.note(zh-tw,SQL.90).gif重要事項:
    雖然受影響的資料列之資料可能會有未聚合的表現,但任何錯誤只要獲得處理,就能夠套用變更,聚合資料。如果發行項的來源資料表已在另一個發行集中發行,則兩個發行項的 compensate_for_errors 值必須相同。
  • [ @stream_blob_columns= ] 'stream_blob_columns'
    指定在複寫二進位大型物件資料行時,使用資料流最佳化。stream_blob_columnsnvarchar(5),預設值是 FALSE。true 表示將嘗試最佳化。

    ms174329.note(zh-tw,SQL.90).gif重要事項:
    啟用這個記憶體最佳化功能可能會減損合併代理程式在同步化時的效能。只有在複寫包含數 MB 資料的資料行時,才應該使用這個選項。
    ms174329.note(zh-tw,SQL.90).gif附註:
    當複寫二進位大型物件時,即使 stream_blob_columns 設為 true,某些合併式複寫功能,如邏輯記錄,仍能夠防止使用資料流最佳化。

傳回碼值

0 (成功) 或 1 (失敗)

備註

sp_addmergearticle 用於合併式複寫中。

當您發行物件時,它們的定義會複製到訂閱者。如果您發行相依於一或多個其他物件的資料庫物件,您就必須發行所有參考的物件。例如,如果您發行相依於資料表的檢視,就必須也發行該資料表。

如果您指定給 partition_options 的值是 3,這個發行項中的每個資料分割都只能有單一訂閱。如果建立第二項訂閱,將新訂閱的篩選準則解析成現有訂閱的相同資料分割,就會卸除現有的訂閱。

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

利用 subset_filterclause,將含靜態水平篩選的發行項加入發行項目有參數化篩選的現有發行集,需要重新初始化訂閱。

當指定 processing_order 時,我們建議您在發行項順序值之間保留間距,以便將來更容易設定新值。例如,如果您有 Article1、Article2 和 Article3 這三個發行項,將 processing_order 設定為 10、20 和 30,而不是 1、2 和 3。如需詳細資訊,請參閱<指定合併發行項的處理順序>。

預設結構描述選項表

下表描述在 schema_option 指定了 NULL 值的情況下,預存程序所設定的預設值,這會隨著發行項類型而不同。

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

func schema only

0x01

indexed view schema only

0x01

proc schema only

0x01

table

  • 0x0C034FD1 - 含原生模式快照集的 SQL Server 2005 相容發行集。
  • 0x08034FF1 - 含字元模式快照集的 SQL Server 2005 相容發行集。
  • 0x30034FF1 - SQL Server 2000 和舊版相容發行集。

view schema only

0x01

ms174329.note(zh-tw,SQL.90).gif附註:
如果發行集支援舊版的 SQL Server,table 的預設結構描述選項便是 0x30034FF1

有效的結構描述選項表

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

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

僅限函數結構描述

0x010x2000

indexed view schema only

0x010x0400x01000x20000x400000x10000000x200000

僅限處理序結構描述

0x010x2000

table

所有選項。

view schema only

0x010x0400x01000x20000x400000x10000000x200000

權限

需要系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色中的成員資格。

範例

DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @table1 = N'Employee'; 
SET @table2 = N'SalesOrderHeader'; 
SET @table3 = N'SalesOrderDetail'; 
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';

-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_object = @table1, 
  @type = N'table', 
  @source_owner = @hrschema,
  @schema_option = 0x0004CF1,
  @description = N'article for the Employee table',
  @subset_filterclause = @filterclause;

-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_object = @table2, 
  @type = N'table', 
  @source_owner = @salesschema, 
  @vertical_partition = N'true',
  @schema_option = 0x0034EF1,
  @description = N'article for the SalesOrderDetail table';

-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table3, 
  @source_object = @table3, 
  @source_owner = @salesschema,
  @description = 'article for the SalesOrderHeader table', 
  @identityrangemanagementoption = N'auto', 
  @pub_identity_range = 100000, 
  @identity_range = 100, 
  @threshold = 80,
  @schema_option = 0x0004EF1;

-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @column = N'CreditCardApprovalCode', 
  @operation = N'drop', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table2, 
  @filtername = N'SalesOrderHeader_Employee', 
  @join_articlename = @table1, 
  @join_filterclause = N'Employee.EmployeeID = SalesOrderHeader.SalesPersonID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table3, 
  @filtername = N'SalesOrderDetail_SalesOrderHeader', 
  @join_articlename = @table2, 
  @join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;
GO

請參閱

參考

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

其他資源

How to: Define an Article (Replication Transact-SQL Programming)
發行資料和資料庫物件
複寫識別資料行
合併式複寫如何偵測並解決衝突

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

變更的內容:
  • 更新 schema_option 參數 0x20000000 值的描述。

2005 年 12 月 5 日

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