sp_addmergearticle (Transact-SQL)
適用於:SQL Server Azure 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),預設值為 false
。 false
開啟數據行追蹤。 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 TABLE 、 CREATE PROCEDURE 等等)。 這是預存程式發行項的預設值。 |
0x10 |
產生對應的叢集索引。 即使未設定這個選項,在已發佈的數據表上已定義與主鍵和 UNIQUE 條件約束相關的索引也會產生。 |
0x20 |
將使用者定義資料類型 (UDT) 轉換為訂閱者端的基底數據類型。 如果 UDT 資料行是主鍵的一部分,或是計算數據行參考 UDT 資料行參考 UDT 資料行,則無法使用此選項。 |
0x40 |
產生對應的非叢集索引。 即使未設定這個選項,在已發佈的數據表上已定義與主鍵和 UNIQUE 條件約束相關的索引也會產生。 |
0x80 |
復寫 PRIMARY KEY 條件約束。 任何與條件約束相關的索引也會復寫,即使選項 0x10 和 0x40 未啟用也一樣。 |
0x100 |
如果已定義,則復寫數據表發行項上的使用者觸發程式。 |
0x200 |
復寫 FOREIGN KEY 條件約束。 如果參考的數據表不是發行集的一部分,則不會復寫已發行數據表上的所有 FOREIGN KEY 條件約束。 |
0x400 |
復寫 CHECK 條件約束。 |
0x800 |
複寫預設值。 |
0x1000 |
復寫數據行層級定序。 |
0x2000 |
復寫與已發佈發行發行項來源對象相關聯的擴充屬性。 |
0x4000 |
復寫 UNIQUE 條件約束。 任何與條件約束相關的索引也會復寫,即使選項 0x10 和 0x40 未啟用也一樣。 |
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 |
將 geography 和 geometry 數據類型轉換成 varbinary(max) ,以便將這些類型的數據行復寫至執行 SQL Server 2005 (9.x) 的訂閱者。 |
0x10000000000 |
復寫 geography 和 geometry 類型的數據行索引。 |
如果此值為 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),預設值為 NULL
。 false
啟用自動識別範圍處理,同時 false
停用它。
注意
此參數已被取代,而且會維護腳本的回溯相容性。 您應該使用 @identityrangemanagementoption 來指定身分識別範圍管理選項。 如需詳細資訊,請參閱複寫識別資料欄。
[ @pub_identity_range = ] pub_identity_range
使用自動識別範圍管理時,控制配置給具有伺服器訂閱之訂閱者的識別範圍大小。 此識別範圍會保留給重新發行的訂閱者,以配置給自己的訂閱者。 @pub_identity_range為 bigint,預設值為 NULL
。 如果 @identityrangemanagementoption 為 或 @auto_identity_range 為 auto
false
,您必須指定此參數。
[ @identity_range = ] identity_range
當使用自動識別範圍管理時,控制配置給發行者和訂閱者的識別範圍大小。 @identity_range為 bigint,預設值為 NULL
。 如果 @identityrangemanagementoption 為 或 @auto_identity_range 為 auto
false
,您必須指定此參數。
注意
@identity_range控制使用舊版 SQL Server 重新發行訂閱者時的識別範圍大小。
[ @threshold = ] 閾值
控制 合併代理程式 指派新識別範圍的百分比值。 使用@threshold中指定的值百分比時,合併代理程式 會建立新的識別範圍。 @threshold為 int,預設值為 NULL
。 如果 @identityrangemanagementoption 為 或 @auto_identity_range 為 auto
false
,您必須指定此參數。
[ @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),預設值為 false
。 false
可讓您在發行項上使用互動式解析程式; 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),預設值為 false
。 false
指定發行項也會發行在交易式發行集中。
[ @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
。
false
指定如果在邏輯記錄中的任何位置進行變更,就會偵測到衝突。false
指定預設衝突偵測會如@column_tracking所指定。 如需詳細資訊,請參閱使用邏輯記錄分組相關資料列的變更。
注意
由於 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_detection 為 false
,則 @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,預設值為 0
。 0
指定發行項未排序,而任何其他值代表本文處理順序的序數值。 發行項會依照從最低值到最高值的順序來處理。 如果兩個發行項具有相同的值,處理順序是由 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),預設值為 true
。 false
表示不會復寫刪除,並 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),預設值為 false
。 true
表示將會嘗試優化。 啟用 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
,而不是 1
、 2
和 3
。Article1
Article3
Article2
20
10
如需詳細資訊,請參閱指定合併式複寫屬性。
默認架構選項數據表
下表描述預存程式所設定的預設值,如果為 @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,則 預設架構選項 table
為 0x30034FF1
。
有效的架構選項數據表
下表說明根據發行項類型@schema_option允許的值。
發行項類型 | 架構選項值 |
---|---|
func schema only |
0x01 和 0x2000 |
indexed view schema only |
0x01 、 0x040 、 0x0100 、、 0x2000 、 0x40000 、 0x1000000 和 0x200000 |
proc schema only |
0x01 和 0x2000 |
table |
所有選項。 |
view schema only |
0x01 、 0x040 、 0x0100 、、 0x2000 、 0x40000 、 0x1000000 和 0x200000 |
範例
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 固定資料庫角色中的成員資格。