sp_addmergearticle (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

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

Transact-SQL 語法慣例

語法

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

引數

[ @publication = ] N'publication '

包含發行項的發行集名稱。 @publication為 sysname ,沒有預設值。

[ @article = ] N'article '

發行項的名稱。 名稱在發行集內必須是唯一的。 @article sysname ,沒有預設值。 @article必須在執行 SQL Server 的本機電腦上,且必須符合識別碼的規則。

[ @source_object = ] N'source_object '

要發佈的資料庫物件。 @source_object為 sysname ,沒有預設值。 如需可使用合併式複寫發行之物件類型的詳細資訊,請參閱 發佈資料和資料庫物件

[ @type = ] N'type '

發行項的類型。 @type是 sysname ,預設值 table ,而且可以是下列其中一個值。

Description
table (預設值) 具有架構和資料的資料表。 複寫會監視資料表,以判斷要複寫的資料。
func schema only 僅具有架構的函式。
indexed view schema only 僅限架構的索引檢視表。
proc schema only 只有架構的預存程式。
synonym schema only 僅限架構的同義字。
view schema only 僅使用架構檢視。

[ @description = ] N'description '

文章的描述。 @description Nvarchar(255) ,預設值為 NULL

[ @column_tracking = ] N'column_tracking '

資料行層級追蹤的設定。 @column_tracking Nvarchar(10) ,預設值為 falsefalse 開啟資料行追蹤。 false 關閉資料行追蹤,並在資料列層級留下衝突偵測。 如果資料表已在其他合併式發行集中發行,您必須根據此資料表使用現有發行項所使用的相同資料行追蹤值。 此參數僅適用于資料表發行項。

注意

如果使用資料列追蹤執行衝突偵測 (預設值),基底資料表最多可以包含 1,024 個資料行,但必須從發行項篩選資料行,以便發行最多 246 個資料行。 如果使用資料行追蹤,則基底資料表可包括的資料行數上限為 246。

[ @status = ] N'status '

發行項的狀態。 @status Nvarchar(10), 預設值為 unsynced 。 如果 active 為 ,則會執行要發行資料表的初始處理腳本。 如果 unsynced 為 ,則下次執行快照集代理程式時,會執行發行資料表的初始處理腳本。

[ @pre_creation_cmd = ] N'pre_creation_cmd '

指定套用快照集時,如果資料表存在於訂閱者端,則系統要執行的動作。 @pre_creation_cmd Nvarchar(10), 而且可以是下列其中一個值。

Description
none 如果資料表已存在於訂閱者端,則不會採取任何動作。
delete 根據子集篩選中的 WHERE 子句發出刪除。
drop (預設值) 在重新建立資料表之前,請先卸載資料表。 支援 SQL Server Compact 訂閱者的必要專案。
truncate 截斷目的地資料表。

[ @creation_script = ] N'creation_script '

選擇性發行項架構腳本的路徑和名稱,用來在訂閱資料庫中建立發行項。 @creation_script Nvarchar(255), 預設值為 NULL

注意

建立腳本不會在 SQL Server Compact 訂閱者上執行。

[ @schema_option = ] schema_option

指定發行項之架構產生選項的點陣圖。 @schema_option為 Varbinary(8) ,而且可以是 |(位 OR) 其中一或多個值的乘積。

Description
0x00 停用快照集代理程式的腳本,並使用@creation_script中 定義的架構預先建立腳本。
0x01 產生物件建立( CREATE TABLECREATE PROCEDURE 等等)。 這是預存程式發行項的預設值。
0x10 產生對應的叢集索引。 即使未設定這個選項,在已發佈的資料表上已定義與主鍵和 UNIQUE 條件約束相關的索引也會產生。
0x20 將使用者定義資料類型 (UDT) 轉換為訂閱者端的基底資料類型。 如果 UDT 資料行是主鍵的一部分,或是計算資料行參考 UDT 資料行參考 UDT 資料行,則無法使用此選項。
0x40 產生對應的非叢集索引。 即使未設定這個選項,在已發佈的資料表上已定義與主鍵和 UNIQUE 條件約束相關的索引也會產生。
0x80 複寫 PRIMARY KEY 條件約束。 任何與條件約束相關的索引也會複寫,即使選項 0x100x40 未啟用也一樣。
0x100 如果已定義,則複寫資料表發行項上的使用者觸發程式。
0x200 複寫 FOREIGN KEY 條件約束。 如果參考的資料表不是發行集的一部分,則不會複寫已發行資料表上的所有 FOREIGN KEY 條件約束。
0x400 複寫 CHECK 條件約束。
0x800 複寫預設值。
0x1000 複寫資料行層級定序。
0x2000 複寫與已發佈發行發行項來源物件相關聯的擴充屬性。
0x4000 複寫 UNIQUE 條件約束。 任何與條件約束相關的索引也會複寫,即使選項 0x100x40 未啟用也一樣。
0x8000 此選項不適用於執行 SQL Server 2005 (9.x) 和更新版本的發行者。
0x10000 複寫 CHECK 條件約束 NOT FOR REPLICATION ,以便在同步處理期間不會強制執行條件約束。
0x20000 複寫 FOREIGN KEY 條件約束 NOT FOR REPLICATION ,以便在同步處理期間不會強制執行條件約束。
0x40000 複寫與資料分割資料表或索引相關聯的檔案群組。
0x80000 複寫資料分割資料表的資料分割配置。
0x100000 複寫資料分割索引的資料分割配置。
0x200000 複寫資料表統計資料。
0x400000 複寫預設系結。
0x800000 複寫規則系結。
0x1000000 複寫全文檢索索引。
0x2000000 系結至 xml 資料行的 XML 架構集合不會複寫。
0x4000000 複寫 xml 資料行上的 索引。
0x8000000 建立訂閱者上尚未存在的任何架構。
0x10000000 xml 資料 行轉換成 訂閱者上的 Ntext
0x20000000 將 SQL Server 2005 (9.x) 中引進的大型物件資料類型 ( Nvarchar(max) Varchar(max) Varbinary(max) 轉換為 SQL Server 2000 (8.x) 所支援的資料類型。
0x40000000 複寫許可權。
0x80000000 嘗試將相依性卸載至不屬於發行集的任何物件。
0x100000000 如果屬性在 Varbinary(max) 資料行上 指定,請使用此選項來複 FILESTREAM 寫屬性。 如果您要將資料表複寫至 SQL Server 2005 (9.x) 訂閱者,請勿指定此選項。 不支援將 FILESTREAM 資料行複寫至 SQL Server 2000 (8.x) 訂閱者的資料表,不論此架構選項的設定方式為何。 請參閱相關選項 0x800000000
0x200000000 將 SQL Server 2008 (10.0.x) 中引進的日期和時間資料類型(date、time、datetimeoffset datetime2 )轉換為舊版 SQL Server 所支援的資料類型。
0x400000000 複寫資料和索引的壓縮選項。 如需詳細資訊,請參閱 數據壓縮
0x800000000 將此選項設定為將 FILESTREAM 資料儲存在訂閱者端自己的檔案群組上。 如果未設定此選項,FILESTREAM 數據會儲存在預設檔案群組上。 複寫不會建立檔案群組;因此,如果您設定此選項,您必須先建立檔案群組,才能在訂閱者端套用快照集。 如需如何在套用快照集之前建立對象的詳細資訊,請參閱 套用快照集之前和之後執行腳本。

請參閱相關選項 0x100000000
0x1000000000 將 Common Language Runtime (CLR) 使用者定義型別 (UDT) 轉換為 varbinary(max),讓 UDT 類型的數據行可以復寫至執行 SQL Server 2005 (9.x) 的訂閱者。
0x2000000000 hierarchyid資料類型轉換成 varbinary(max),以便將hierarchyid類型的數據行復寫至執行 SQL Server 2005 (9.x) 的訂閱者。 如需如何在復寫數據表中使用hierarchyid數據行的詳細資訊,請參閱hierarchyid資料類型方法參考。
0x4000000000 復寫數據表上任何篩選的索引。 如需已篩選索引的詳細資訊,請參閱建立篩選的索引 (機器翻譯)
0x8000000000 geographygeometry 數據類型轉換成 varbinary(max) ,以便將這些類型的數據行復寫至執行 SQL Server 2005 (9.x) 的訂閱者。
0x10000000000 復寫 geographygeometry 類型的數據行索引。

如果此值為 NULL,則系統會自動產生發行項的有效架構選項。 [ 預設架構選項] 資料表 會顯示根據發行項類型選擇的值。 此外,並非所有 @schema_option 值都適用於每種類型的復寫和發行項類型。 [ 有效架構選項] 資料表 會顯示可以為指定發行項類型指定的選項。

注意

@schema_option參數只會影響初始快照集的複寫選項。 一旦 快照集代理程式 產生初始架構,並在訂閱者端套用之後,發行集架構的復寫就會根據架構變更復寫規則和sp_addmergepublication中指定的@replicate_ddl參數設定進行。 如需詳細資訊,請參閱對發行集資料庫進行結構描述變更

[ @subset_filterclause = ] N'subset_filterclause'

WHERE 子句,指定數據表發行項的水平篩選,不含 WHERE 一字。 @subset_filterclause為 nvarchar(1000),預設值為空字串。

重要

基於效能考慮,建議您不要將函式套用至參數化數據列篩選子句中的數據行名稱,例如 LEFT([MyColumn]) = SUSER_SNAME()。 如果您在篩選子句中使用 HOST_NAME 並覆寫 HOST_NAME 值,您可能必須使用 CONVERT 來轉換資料類型 。 如需此案例最佳做法的詳細資訊,請參閱參數化篩選 - 參數化資料列篩選 中的 <覆寫host_name() 值="">一節。

[ @article_resolver = ] N'article_resolver '

COM 型解析程式,用來解決資料表發行項上的衝突,或叫用以在資料表發行項上執行自訂商務邏輯的 .NET Framework 元件。 @article_resolver為 Nvarchar(255) ,預設值為 NULL 。 此參數的可用值會列在 Microsoft 自訂解析程式中。 如果所提供的值不是其中一個 Microsoft 解析程式,SQL Server 會使用指定的解析程式,而不是系統提供的解析程式。 使用 sp_enumcustomresolvers 列舉可用的自訂解析程式清單。 如需詳細資訊,請參閱 在合併同步處理 期間執行商務邏輯和 進階合併式複寫 - 衝突偵測和解決

[ @resolver_info = ] N'resolver_info '

用來指定自訂解析程式所需的其他資訊。 某些 Microsoft 解析程式需要提供資料行做為解析程式的輸入。 @resolver_info Nvarchar(517), 預設值為 NULL 。 如需詳細資訊,請參閱 進階合併式複寫衝突 - COM 型解析程式

[ @source_owner = ] N'source_owner '

@source_object 擁有 者的名稱。 @source_owner 為 sysname ,預設值為 NULL 。 如果 NULL 為 ,則假設目前使用者為擁有者。

[ @destination_owner = ] N'destination_owner '

如果不是 dbo ,則為訂閱資料庫中物件的擁有者。 @destination_owner 為 sysname ,預設值為 NULL 。 如果 NULL 為 , dbo 則假設為擁有者。

[ @vertical_partition = ] N'vertical_partition '

啟用和停用資料表發行項的資料行篩選。 @vertical_partition為 Nvarchar(5) ,預設值為 false

  • false 表示沒有垂直篩選併發布所有資料行。

  • false 清除宣告的主鍵和資料 ROWGUID 行以外的所有資料行。 資料行會使用 sp_mergearticlecolumn 來新增。

[ @auto_identity_range = ] N'auto_identity_range '

在建立發行集時,啟用和停用此資料表發行項的自動識別範圍處理。 @auto_identity_range為 Nvarchar(5) ,預設值為 NULLfalse 啟用自動識別範圍處理,同時 false 停用它。

注意

此參數已被取代,而且會維護腳本的回溯相容性。 您應該使用 @identityrangemanagementoption 來指定身分識別範圍管理選項。 如需詳細資訊,請參閱複寫識別資料欄

[ @pub_identity_range = ] pub_identity_range

使用自動識別範圍管理時,控制配置給具有伺服器訂閱之訂閱者的識別範圍大小。 此識別範圍會保留給重新發行的訂閱者,以配置給自己的訂閱者。 @pub_identity_range 為 Bigint ,預設值為 NULL 。 如果 @identityrangemanagementoption 為 或 @auto_identity_range autofalse ,您必須指定此參數。

[ @identity_range = ] identity_range

當使用自動識別範圍管理時,控制配置給發行者和訂閱者的識別範圍大小。 @identity_range 為 Bigint ,預設值為 NULL 。 如果 @identityrangemanagementoption 為 或 @auto_identity_range autofalse ,您必須指定此參數。

注意

@identity_range 控制使用舊版 SQL Server 重新發行訂閱者時的識別範圍大小。

[ @threshold = ] 閾值

控制合併代理程式指派新識別範圍的百分比值。 使用@threshold 中指定的 值百分比時,合併代理程式會建立新的識別範圍。 @threshold為 int ,預設值為 NULL 。 如果 @identityrangemanagementoption 為 或 @auto_identity_range autofalse ,您必須指定此參數。

[ @verify_resolver_signature = ] verify_resolver_signature

指定在合併式複寫中使用解析程式之前,是否驗證數位簽章。 @verify_resolver_signature 為 int ,預設值為 1

  • 0 指定簽章未驗證。

  • 1 指定簽章已驗證,以查看其是否來自受信任的來源。

[ @destination_object = ] N'destination_object '

訂閱資料庫中的物件名稱。 @destination_object 為 sysname ,預設值為 @source_object 只有當發行項是僅限架構的發行項,例如預存程式、檢視表和 UDF 時,才能指定此參數。 如果指定的發行項是資料表發行項,@source_object 中的 值會覆寫 @destination_object 中的 值。

[ @allow_interactive_resolver = ] N'allow_interactive_resolver '

啟用或停用發行項上的互動式解析程式使用。 @allow_interactive_resolver為 Nvarchar(5) ,預設值為 falsefalse 可讓您在發行項上使用互動式解析程式; false 停用它。

注意

SQL Server Compact 訂閱者不支援互動式解析程式。

[ @fast_multicol_updateproc = ] N'fast_multicol_updateproc '

此參數已被取代,而且會維護腳本的回溯相容性。

[ @check_permissions = ] check_permissions

當合併代理程式將變更套用至發行者時,所驗證之資料表層級許可權的點陣圖。 如果合併進程所使用的發行者登入/使用者帳戶沒有正確的資料表許可權,則會將不正確變更記錄為衝突。 @check_permissions為 int ,而且可以是 |(位 OR) 下列一或多個值的乘積。

Description
0x00 (預設值) 不會檢查許可權。
0x10 在訂閱者端進行插入作業之前,請先檢查發行者的許可權。
0x20 在訂閱者端進行更新作業之前,請先檢查發行者的許可權。
0x40 在訂閱者端進行刪除作業之前,請先檢查發行者的許可權。

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

確認此預存程式所採取的動作可能會使現有的快照集失效。 @force_invalidate_snapshot為 bit ,預設值為 0

  • 0 指定新增發行項不會造成快照集無效。 如果預存程式偵測到變更確實需要新的快照集,就會發生錯誤,而且不會進行任何變更。

  • 1 指定新增發行項可能會導致快照集無效,而且如果有現有的訂用帳戶需要新的快照集,則授與現有快照集標示為過時和產生的新快照集的許可權。 將發行項新增至具有現有快照集 的發行集時,@force_invalidate_snapshot設定為 1

[ @published_in_tran_pub = ] N'published_in_tran_pub'

表示合併式發行集中的發行項也會在交易式發行集中發行。 @published_in_tran_pub為 nvarchar(5),預設值為 falsefalse 指定發行項也會發行在交易式發行集中。

[ @force_reinit_subscription = ] force_reinit_subscription

確認此預存程式所採取的動作可能需要重新初始化現有的訂用帳戶。 @force_reinit_subscription為 bit,預設值為 0

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

  • 1 表示合併發行項的變更會導致現有的訂閱重新初始化,並授與重新初始化訂閱的許可權。 當@subset_filterclause指定參數化資料列篩選時,@force_reinit_subscription會設定為 1

[ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection'

指定屬於邏輯記錄成員之發行項的衝突偵測層級。 @logical_record_level_conflict_detection為 nvarchar(5),預設值為 false

注意

由於 SQL Server Compact Subscribers 不支援邏輯記錄,因此您必須為 @logical_record_level_conflict_detection 指定 值false以支援這些訂閱者。

[ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution'

指定屬於邏輯記錄成員之發行項的衝突解決層級。 @logical_record_level_conflict_resolution為 nvarchar(5),預設值為 false

  • false 指定整個獲勝邏輯記錄會覆寫遺失的邏輯記錄。

  • false 指定勝出數據列不受邏輯記錄的限制。

如果 @logical_record_level_conflict_detectionfalse,則 @logical_record_level_conflict_resolution 也必須設定為 false。 如需詳細資訊,請參閱使用邏輯記錄分組相關資料列的變更

注意

由於 SQL Server Compact Subscribers 不支援邏輯記錄,因此您必須為 @logical_record_level_conflict_resolution 指定 值false以支援這些訂閱者。

[ @partition_options = ] partition_options

定義發行項數據分割的方式,當所有數據列只屬於一個數據分割或一個訂閱時,這可啟用效能優化。 @partition_options為 tinyint,可以是下列其中一個值。

Description
0 (預設值) 發行項的篩選是靜態的,或不會產生每個數據分割的唯一數據子集,也就是「重疊」的數據分割。
1 數據分割是重疊的,而且在訂閱者端進行的數據操作語言 (DML) 更新無法變更數據列所屬的數據分割。
2 發行項的篩選會產生非重疊的數據分割,但多個訂閱者可以接收相同的分割區。
3 發行項的篩選會產生每個訂用帳戶唯一的非重疊分割區。

注意

如果發行項的源數據表已經發行在另一個發行集中,則這兩個發行項的 @partition_options都必須相同。

[ @processing_order = ] processing_order

指出合併式發行集中發行項的處理順序。 @processing_order為 int,預設值為 00 指定發行項未排序,而任何其他值代表本文處理順序的序數值。 發行項會依照從最低值到最高值的順序來處理。 如果兩個發行項具有相同的值,處理順序是由 sysmergearticles 系統數據表中發行項昵稱的順序所決定。 如需詳細資訊,請參閱指定合併式複寫屬性

[ @subscriber_upload_options = ] subscriber_upload_options

定義使用用戶端訂閱在訂閱者端進行的更新限制。 如需詳細資訊,請參閱使用僅限下載的發行項最佳化合併式複寫效能@subscriber_upload_options為 tinyint,可以是下列其中一個值。

Description
0 (預設值) 無限制。 在訂閱者端進行的變更會上傳到發行者
1 訂閱者端允許變更,但不會上傳至發行者。
2 訂閱者端不允許變更。

變更 @subscriber_upload_options 需要藉由呼叫 sp_reinitmergepullsubscription (Transact-SQL) 重新初始化訂用帳戶。

注意

如果發行項的源數據表已在另一個發行集中發行,則這兩個發行項的 @subscriber_upload_options必須相同。

[ @identityrangemanagementoption = ] N'identityrangemanagementoption'

指定如何處理發行項的身分識別範圍管理。 @identityrangemanagementoption為 nvarchar(10),而且可以是下列其中一個值。

Description
none 停用身分識別範圍管理。
manual 使用 NOT FOR REPLICATION 標記識別數據行,以啟用手動識別範圍處理。
auto 指定識別範圍的自動管理。
NULL (預設值) none當 @auto_identity_range 的值不是 true時,預設值為 。

為了回溯相容性,當 @identityrangemanagementoption的值NULL時,會檢查 @auto_identity_range的值。 不過,當 @identityrangemanagementoption的值不是 NULL時,則會忽略@auto_identity_range的值。 如需詳細資訊,請參閱複寫識別資料欄

[ @delete_tracking = ] N'delete_tracking'

指出是否復寫刪除。 @delete_tracking為 nvarchar(5),預設值為 truefalse 表示不會復寫刪除,並 true 指出會復寫刪除,這是合併式複寫的一般行為。 當@delete_tracking設定為 false,在訂閱者端刪除的數據列必須在發行者端手動移除,而且必須在訂閱者端手動移除在發行者端刪除的數據列。

重要

將@delete_tracking設定false會導致非聚合。 如果發行項的源數據表已在另一個發行集中發行,則這兩個發行項的 @delete_tracking都必須相同。

注意

無法使用 [新增發行集精靈] 或 [發行集屬性] 對話框來設定@delete_tracking選項。

[ @compensate_for_errors = ] N'compensate_for_errors'

指出當同步處理期間發生錯誤時,是否要採取補償動作。 @compensate_for_errors為 nvarchar(5),預設值為 false。 當設定為 true時,同步處理期間無法在訂閱者或發行者端套用的變更一律會導致補償動作復原變更;不過,產生錯誤的訂閱者設定不正確,可能會導致其他訂閱者和發行者復原變更。 false 停用這些補償動作,不過,錯誤仍會記錄為補償,後續合併會繼續嘗試套用變更,直到成功為止。

重要

雖然受影響數據列中的數據可能似乎無法聚合,但只要解決任何錯誤,就可以套用變更,且數據會聚合。 如果發行項的源數據表已在另一個發行集中發行,則這兩個發行項的 @compensate_for_errors必須相同。

[ @stream_blob_columns = ] N'stream_blob_columns'

指定複寫二進位大型物件數據行時,會使用數據流優化。 @stream_blob_columns為 nvarchar(5),預設值為 falsetrue 表示將會嘗試優化。 啟用 FILESTREAM 時, @stream_blob_columns設定為 true。 這可讓 FILESTREAM 數據的複寫以最佳方式執行,並減少記憶體使用率。 若要強制 FILESTREAM 數據表發行項不使用 Blob 串流,請使用 sp_changemergearticle 將@stream_blob_columns設定為 false。

重要

啟用此記憶體優化可能會降低同步處理期間 合併代理程式的效能。 只有當復寫包含數 MB 資料的數據行時,才應該使用此選項。

注意

某些合併式複寫功能,例如邏輯記錄,仍然可以防止在複寫二進位大型物件時使用數據流優化,即使 @stream_blob_columns 設定為 true

傳回碼值

0 (成功)或 1 (失敗)。

備註

sp_addmergearticle 用於合併式複寫。

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

如果您為 @partition_options指定的值3

  • 該文章中每個數據分割只能有一個訂用帳戶。 如果建立第二項訂閱,將新訂閱的篩選準則解析成現有訂閱的相同資料分割,就會卸除現有的訂閱。

  • 每當執行 合併代理程式,且分割的快照集會更快過期時,就會清除元數據。 使用此選項時,您應該考慮啟用訂閱者要求的分割快照集。 如需詳細資訊,請參閱 使用參數化篩選建立合併式發行集的快照集

如果您使用@subset_filterclause將具有靜態水準篩選的發行項新增至具有參數化篩選之發行項的現有發行集,則必須重新初始化訂閱。

當您指定 @processing_order時,建議您保留發行項順序值之間的間距,這可讓您更輕鬆地在未來設定新的值。 例如,如果您有三篇文章、、 和 ,請將@processing_order設定為 、、 和 30,而不是 123Article1Article3Article22010 如需詳細資訊,請參閱指定合併式複寫屬性

默認架構選項數據表

下表描述預存程式所設定的預設值,如果為 @schema_option 指定值NULL,則視發行項類型而定。

發行項類型 架構選項值
func schema only 0x01
indexed view schema only 0x01
proc schema only 0x01
table 0x0C034FD1 - SQL Server 2005 (9.x) 和更新版本的相容發行集與原生模式快照集。

0x08034FF1 - SQL Server 2005 (9.x) 和更新版本的相容發行集與字元模式快照集。
view schema only 0x01

注意

如果發行集支援舊版 SQL Server,則 預設架構選項 table0x30034FF1

有效的架構選項數據表

下表說明根據發行項類型@schema_option允許的值

發行項類型 架構選項值
func schema only 0x010x2000
indexed view schema only 0x010x0400x0100、、 0x20000x400000x10000000x200000
proc schema only 0x010x2000
table 所有選項。
view schema only 0x010x0400x0100、、 0x20000x400000x10000000x200000

範例

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.BusinessEntityID = 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

權限

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