sp_addmergearticle (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'
這是發行項所在的發行集名稱。 publication 是 sysname,沒有預設值。[ @article= ] 'article'
這是發行項的名稱。 這個名稱在發行集內必須是唯一的。 article 是 sysname,沒有預設值。 article 必須在執行 Microsoft SQL Server 的本機電腦上,且必須符合識別碼規則。[ @source_object= ] 'source_object'
這是要發佈的資料庫物件。 source_object 是 sysname,沒有預設值。 如需有關能夠利用合併式複寫來發行之物件類型的詳細資訊,請參閱<發行資料和資料庫物件>。[ @type= ] 'type'
這是發行項的類型。 type 是 sysname,預設值為 table,而且可以是下列其中一個值。值
說明
table (預設值)
含結構描述和資料的資料表。 複寫會監視資料表來判斷要複寫的資料。
func schema only
只含結構描述的函數。
indexed view schema only
只含結構描述的索引檢視。
proc schema only
僅限結構描述的預存程序。
synonym schema only
僅限結構描述的同義字。
view schema only
只含結構描述的檢視。
[ @description= ] 'description'
這是發行項的描述。 description 是 nvarchar(255),預設值是 NULL。[ @column_tracking= ] 'column_tracking'
這是資料行層級追蹤的設定。 column_tracking 是 nvarchar(10),預設值是 FALSE。 true開啟資料行層級追蹤。 false 會關閉資料行追蹤,並將衝突偵測保留在資料列層級。 如果資料表已發行在其他合併式發行集中,您必須使用依據這份資料表之現有發行項所使用的相同資料行追蹤值。 這個參數只適用於資料表發行項。[!附註]
如果使用資料列追蹤執行衝突偵測 (預設值),基底資料表最多可以包含 1,024 個資料行,但必須從發行項篩選資料行,以便發行最多 246 個資料行。 如果使用資料行追蹤,則基底資料表可包括的資料行數上限為 246。
[ @status= ] 'status'
這是發行項的狀態。 status 是 nvarchar(10),預設值是 unsynced。 如果是 active,便執行發行資料表的初始處理指令碼。 如果是 unsynced,便在下次執行快照集代理程式時,執行發行資料表的初始處理指令碼。[ @pre_creation_cmd= ] 'pre_creation_cmd'
指定在套用快照集時,如果資料表存在於訂閱者,系統要採取什麼動作。 pre_creation_cmd 是 nvarchar(10),而且可以是下列其中一個值。值
說明
none
如果訂閱者端已有資料表,就不會採取任何動作。
delete
根據子集篩選中的 WHERE 子句來發出一項刪除。
drop (預設值)
在重新建立資料表之前,先卸除資料表。 支援 Microsoft SQL Server Compact 訂閱者需要這個值。
truncate
截斷目的地資料表。
[ @creation_script= ] 'creation_script'
在訂閱資料庫中,這是用來建立發行項的選擇性發行項結構描述指令碼的路徑和名稱。 creation_script 是 nvarchar(255),預設值是 NULL。[!附註]
建立指令碼並非執行於 SQL Server Compact 訂閱者。
[ @schema_option= ] schema_option
這是給定發行項的結構描述產生選項點陣圖。 schema_option 是 binary(8),它可以是一個或多個這些值的 | (Bitwise OR) 結果。值
說明
0x00
停用快照集代理程式的指令碼,並使用所提供之預先建立結構描述的指令碼 (定義在 creation_script 中)。
0x01
產生物件的建立作業 (CREATE TABLE、CREATE PROCEDURE 等)。 這是預存程序發行項的預設值。
0x10
產生對應的叢集索引。 即使未設定這個選項,如果已發行的資料表上已經有定義與主索引鍵和 UNIQUE 條件約束有關的索引,仍會產生這些索引。
0x20
在訂閱者端將使用者定義資料類型 (UDT) 轉換成基底資料型別。 如果 UDT 資料行是主索引鍵的一部分或計算資料行參考 UDT 資料行,則當 UDT 資料行中有 CHECK 或 DEFAULT 條件約束時,就不能使用這個選項。
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 或更新版本的發行者無效。
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 中所導入的大型物件資料類型 (nvarchar(max)、varchar(max) 和 varbinary(max)) 轉換成 SQL Server 2000 所支援的資料類型。
0x40000000
複寫權限。
0x80000000
試圖卸除對於不在發行集中之任何物件的相依性。
0x100000000
使用這個選項即可複寫 FILESTREAM 屬性 (如果它指定於 varbinary(max) 資料行上的話)。 如果您要將資料表複寫至 SQL Server 2005 訂閱者,請勿指定這個選項。 目前不支援將含有 FILESTREAM 資料行的資料表複寫至 SQL Server 2000 訂閱者,不論這個結構描述選項的設定方式為何都一樣。 請參閱相關的選項 0x800000000。
0x200000000
將 SQL Server 2008 中所導入的日期和時間資料類型 (date、time、datetimeoffset 和 datetime2) 轉換成舊版 SQL Server 所支援的資料類型。
0x400000000
複寫資料與索引的壓縮選項。 如需詳細資訊,請參閱<資料壓縮>。
0x800000000
設定這個選項即可將 FILESTREAM 資料儲存在訂閱者端的檔案群組中。 如果沒有設定這個選項,FILESTREAM 資料就會儲存在預設檔案群組中。 複寫不會建立檔案群組。因此,如果您設定這個選項,就必須先建立檔案群組,然後再於訂閱者端套用快照集。 如需有關如何在套用快照集之前建立物件的詳細資訊,請參閱<在套用快照集之前及之後執行指令碼>。
請參閱相關的選項 0x100000000。
0x1000000000
將 Common Language Runtime (CLR) 使用者定義型別 (UDT) 轉換成 varbinary(max),如此 UDT 類型的資料行就可以複寫至正在執行 SQL Server 2005 的訂閱者。
0x2000000000
將 hierarchyid 資料類型轉換成 varbinary(max),如此 hierarchyid 類型的資料行就可以複寫至正在執行 SQL Server 2005 的訂閱者。 如需有關如何在複寫資料表中使用 hierarchyid 資料行的詳細資訊,請參閱<hierarchyid (Transact-SQL)>。
0x4000000000
複寫資料表上任何已篩選的索引。 如需有關已篩選之索引的詳細資訊,請參閱<建立篩選的索引>。
0x8000000000
將 geography 和 geometry 資料類型轉換成 varbinary(max),如此這些類型的資料行就可以複寫至正在執行 SQL Server 2005 的訂閱者。
0x10000000000
複寫 geography 和 geometry 類型之資料行的索引。
如果這個值是 NULL,系統會自動產生發行項的有效結構描述選項。 <備註>一節中的預設結構描述選項表顯示以發行項類型為基礎而選擇的值。 另外,並非所有 schema_option 值對於每個複寫類型和發行項類型都有效。 <備註>一節中提供的有效結構描述選項表顯示給定的發行項類型所能指定的選項。
[!附註]
schema_option 參數只會影響初始快照集的複寫選項。 在快照集代理程式產生初始結構描述,且在訂閱者端套用這個結構描述之後,會根據結構描述變更複寫規則及 sp_addmergepublication 中所指定的 replicate_ddl 參數設定,將發行集結構描述變更複寫到訂閱者。 如需詳細資訊,請參閱<對發行集資料庫進行結構描述變更>。
[ @subset_filterclause= ] 'subset_filterclause'
這是一個 WHERE 子句,指定資料表發行項的水平篩選,但不含 WHERE 一字。 subset_filterclause 屬於 nvarchar(1000),預設值是空字串。重要事項 基於效能的考量,建議您不要在參數化資料列篩選器子句中的資料行名稱套用函數,例如 LEFT([MyColumn]) = SUSER_SNAME()。 如果您在篩選子句中使用 HOST_NAME,且覆寫了 HOST_NAME 值,您可能需要利用 CONVERT 來轉換資料類型。 如需有關此案例之最佳做法的詳細資訊,請參閱<參數化資料列篩選器>中的<覆寫 HOST_NAME() 值>一節。
[ @article_resolver= ] 'article_resolver'
這是以 COM 為基礎的解析程式,用於解決資料表發行項的衝突,或為了在資料表發行項上執行自訂商務邏輯而呼叫之 .NET Framework 組件的衝突。 article_resolver 是 varchar(255),預設值是 NULL。 這個參數可用的值列在 Microsoft 自訂解析程式中。 如果提供的值不是 Microsoft 解析程式之一,SQL Server 會利用指定的解析程式來取代系統提供的解析程式。 請利用 sp_enumcustomresolvers 來列舉可用自訂解析程式的清單。 如需詳細資訊,請參閱<在合併同步處理期間執行商務邏輯>和<進階合併式複寫衝突偵測與解決>。[ @resolver_info= ] 'resolver_info'
這用於指定自訂解析程式所需要的其他資訊。 部分 Microsoft 解析程式需要用於當做解析程式輸入的資料行。 resolver_info 是 nvarchar(255),預設值是 NULL。 如需詳細資訊,請參閱<以 COM 為基礎的 Microsoft 解析程式>。[ @source_owner= ] 'source_owner'
這是 source_object 擁有者的名稱。 source_owner 是 sysname,預設值是 NULL。 如果是 NULL,就假設目前使用者是擁有者。[ @destination_owner= ] 'destination_owner'
如果訂閱資料庫中之物件的擁有者不是 dbo 的話,這便是訂閱資料庫中之物件的擁有者。 destination_owner 是 sysname,預設值是 NULL。 如果是 NULL,就假設 'dbo' 是擁有者。[ @vertical_partition= ] 'column_filter'
在資料表發行項上,啟用和停用資料行的篩選。 vertical_partition 是 nvarchar(5),預設值是 FALSE。false 表示沒有垂直篩選,而且會發行所有資料行。
true 會清除已宣告的主索引鍵和 ROWGUID 資料行之外的所有資料行。 資料行是利用 sp_mergearticlecolumn 來加入的。
[ @auto_identity_range= ] 'automatic_identity_range'
在發行集建立之時,啟用和停用此資料表發行項的自動識別範圍處理。 auto_identity_range 是 nvarchar(5),預設值是 FALSE。 true 會啟用自動識別範圍處理,而 false 會停用它。[!附註]
auto_identity_range 已被取代,而且是為了回溯相容性才提供。 您應該利用 identityrangemanagementoption 來指定識別範圍管理選項。 如需詳細資訊,請參閱<複寫識別欄位>。
[ @pub_identity_range= ] pub_identity_range
控制使用自動識別範圍管理時,利用伺服器訂閱配置給訂閱者的識別範圍大小。 這個識別範圍保留供重新發行訂閱者配置給自己的訂閱者。 pub_identity_range 是 bigint,預設值是 NULL。 如果 identityrangemanagementoption 為 auto 或是 auto_identity_range 為 true,您就必須指定這個參數。[ @identity_range= ] identity_range
控制使用自動識別範圍管理時,配置給發行者和訂閱者的識別範圍大小。 identity_range 是 bigint,預設值是 NULL。 如果 identityrangemanagementoption 為 auto 或是 auto_identity_range 為 true,您就必須指定這個參數。[!附註]
identity_range 會控制利用舊版 SQL Server 重新發行訂閱者時的識別範圍大小。
[ @threshold= ] threshold
這是一個百分比值,用於控制合併代理程式指派新識別範圍的時機。 當使用 threshold 中指定的百分比值時,合併代理程式會建立新的識別範圍。 threshold 是 int,預設值是 NULL。 如果 identityrangemanagementoption 為 auto 或是 auto_identity_range 為 true,您就必須指定這個參數。[ @verify_resolver_signature= ] verify_resolver_signature
指定在合併式複寫中使用解析程式之前,是否要驗證數位簽章: verify_resolver_signature 是 int,預設值是 1。0 指定不驗證簽章。
1 指定將驗證簽章來了解它是否來自信任來源。
[ @destination_object= ] 'destination_object'
這是訂閱資料庫中之物件的名稱。 destination_object 是 sysname,預設值是 @source_object。 只有在這個發行項是僅限結構描述的發行項 (如預存程序、檢視和 UDF) 時,才能指定這個參數。 如果指定的發行項是資料表發行項,則 @source\_object 中的值會覆寫 destination_object 中的值。[ @allow_interactive_resolver= ] 'allow_interactive_resolver'
啟用或停用發行項的互動解析程式。 allow_interactive_resolver 是 nvarchar(5),預設值是 FALSE。 true 會啟用發行項的互動解析程式,而 false 會停用它。[!附註]
SQL Server Compact 訂閱者不支援互動解析程式。
[ @fast_multicol_updateproc= ] 'fast_multicol_updateproc'
這個參數已被取代,維護它的目的,只是為了與舊版的指令碼相容。[ @check_permissions= ] check_permissions
這是合併代理程式將變更套用在發行者時,所驗證之資料表層級權限的點陣圖。 如果合併處理序所使用的發行者登入/使用者帳戶並沒有正確的資料表權限,就會將無效的變更記錄為衝突。 check_permissions 是 int,它可以是一個或多個下列值的 | (位元 OR) 結果。值
說明
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= ] 'published_in_tran_pub'
指出合併式發行集中的發行項也在交易式發行集中發行。 published_in_tran_pub 是 nvarchar(5),預設值是 FALSE。 true 指定發行項也在交易式發行集中發行。[ @force_reinit_subscription= ] force_reinit_subscription
認可這個預存程序所採取的動作可能需要重新初始化現有的訂閱。 force_reinit_subscription 是 bit,預設值是 0。0 指定加入發行項並不會使訂閱重新初始化。 如果預存程序偵測到變更需要重新初始化現有的訂閱,就會發生錯誤,且不會進行任何變更。
1 表示合併發行項的變更會使現有的訂閱重新初始化,且會提供將發生之訂閱重新初始化的權限。 當 subset_filterclause 指定參數化資料列篩選器時,force_reinit_subscription 會設定為 1。
[ @logical_record_level_conflict_detection= ] 'logical_record_level_conflict_detection'
指定本身是邏輯記錄成員的發行項之衝突偵測層級。 logical_record_level_conflict_detection 是 nvarchar(5),預設值是 FALSE。true 指定如果在邏輯記錄的任何位置進行變更,便會偵測到衝突。
false 指定依照 column_tracking 所指定的方式來使用預設衝突偵測。 如需詳細資訊,請參閱<使用邏輯記錄分組相關資料列的變更>。
[!附註]
由於 SQL Server Compact 訂閱者不支援邏輯記錄,所以您必須針對 logical_record_level_conflict_detection 指定 false 值,才能夠支援這些訂閱者。
[ @logical_record_level_conflict_resolution= ] 'logical_record_level_conflict_resolution'
指定本身是邏輯記錄成員的發行項之衝突解決層級。 logical_record_level_conflict_resolution 是 nvarchar(5),預設值是 FALSE。true 指定用整個優先邏輯記錄來覆寫遺失的邏輯記錄。
false 指定優先資料列不限於邏輯記錄。 如果 logical_record_level_conflict_detection 是 true,則 logical_record_level_conflict_resolution 必須也設定為 true。 如需詳細資訊,請參閱<使用邏輯記錄分組相關資料列的變更>。
[!附註]
由於 SQL Server Compact 訂閱者不支援邏輯記錄,所以您必須針對 logical_record_level_conflict_resolution 指定 false 值,才能夠支援這些訂閱者。
[ @partition_options= ] partition_options
定義發行項資料進行資料分割的方式,當所有資料列只屬於單一資料分割或單一訂閱時,能夠使效能最佳化。 partition_options 是 tinyint,而且可以是下列其中一個值。值
說明
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,而且可以是下列其中一個值。值
說明
0 (預設值)
無限制。 在訂閱者端進行的變更會上傳到發行者
1
允許在訂閱者端進行變更,但是變更不會上傳到發行者。
2
不允許在訂閱者端進行變更。
變更 subscriber_upload_options 需要透過呼叫 sp_reinitmergepullsubscription (Transact-SQL) 重新初始化訂閱。
[!附註]
如果發行項的來源資料表已在另一個發行集中發行,則兩個發行項的 subscriber_upload_options 值必須相同。
[ @identityrangemanagementoption= ] identityrangemanagementoption
指定如何處理發行項的識別範圍管理。 identityrangemanagementoption 是 nvarchar(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_tracking 是 nvarchar(5),預設值是 TRUE。 false 表示不複寫刪除,而 true 表示複寫刪除 (這對合併式複寫而言是很平常的行為)。 當 delete_tracking 設為 false 時,您必須在發行者端手動移除在訂閱者端刪除的資料列,在訂閱者端手動移除在發行者端刪除的資料列。重要事項 將 delete_tracking 設為 false 會無法聚合。 如果發行項的來源資料表已在另一個發行集中發行,則兩個發行項的 delete_tracking 值必須相同。
[!附註]
不能使用「新增發行集精靈」或 [發行集屬性] 對話方塊設定 delete_tracking 選項。
[ @compensate_for_errors= ] 'compensate_for_errors'
指出在同步處理期間發現錯誤時,是否採取補償動作。 compensate_for_errors i 是 nvarchar(5),預設值是 FALSE。 當設為 true 時,訂閱者或發行者在同步處理期間所無法套用的變更,一律會使補償動作恢復變更。不過,設定不正確因而會產生錯誤的訂閱者,可能會恢復其他訂閱者和發行者所進行的變更。 false 會停用這些補償動作,不過,錯誤仍會記錄成含有補償,而且後續的合併會繼續試圖套用變更,直到成功為止。重要事項 雖然受影響的資料列之資料可能會有未聚合的表現,但任何錯誤只要獲得處理,就能夠套用變更,聚合資料。 如果發行項的來源資料表已在另一個發行集中發行,則兩個發行項的 compensate_for_errors 值必須相同。
[ @stream_blob_columns= ] '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,這個發行項中的每個資料分割都只能有單一訂閱。 如果建立第二項訂閱,將新訂閱的篩選準則解析成現有訂閱的相同資料分割,就會卸除現有的訂閱。
當指定給 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 |
|
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
權限
需要系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色中的成員資格。
請參閱
參考
sp_changemergearticle (Transact-SQL)
sp_dropmergearticle (Transact-SQL)
sp_helpmergearticle (Transact-SQL)