sp_addarticle (Transact-SQL)

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

建立發行項,並將它加入至發行集。 這個預存程式會在發行集資料庫的發行者端執行。

Transact-SQL 語法慣例

語法

sp_addarticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @source_table = ] N'source_table' ]
    [ , [ @destination_table = ] N'destination_table' ]
    [ , [ @vertical_partition = ] N'vertical_partition' ]
    [ , [ @type = ] N'type' ]
    [ , [ @filter = ] N'filter' ]
    [ , [ @sync_object = ] N'sync_object' ]
    [ , [ @ins_cmd = ] N'ins_cmd' ]
    [ , [ @del_cmd = ] N'del_cmd' ]
    [ , [ @upd_cmd = ] N'upd_cmd' ]
    [ , [ @creation_script = ] N'creation_script' ]
    [ , [ @description = ] N'description' ]
    [ , [ @pre_creation_cmd = ] N'pre_creation_cmd' ]
    [ , [ @filter_clause = ] N'filter_clause' ]
    [ , [ @schema_option = ] schema_option ]
    [ , [ @destination_owner = ] N'destination_owner' ]
    [ , [ @status = ] status ]
    [ , [ @source_owner = ] N'source_owner' ]
    [ , [ @sync_object_owner = ] N'sync_object_owner' ]
    [ , [ @filter_owner = ] N'filter_owner' ]
    [ , [ @source_object = ] N'source_object' ]
    [ , [ @artid = ] artid OUTPUT ]
    [ , [ @auto_identity_range = ] N'auto_identity_range' ]
    [ , [ @pub_identity_range = ] pub_identity_range ]
    [ , [ @identity_range = ] identity_range ]
    [ , [ @threshold = ] threshold ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @use_default_datatypes = ] use_default_datatypes ]
    [ , [ @identityrangemanagementoption = ] N'identityrangemanagementoption' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot' ]
[ ; ]

引數

[ @publication = ] N'publication'

包含發行項的發行集名稱。 名稱在資料庫中必須是唯一的。 @publication為 sysname,沒有預設值。

[ @article = ] N'article'

發行項的名稱。 名稱在發行集內必須是唯一的。 @article為 sysname,沒有預設值。

[ @source_table = ] N'source_table'

此參數已被取代;請改用 @source_object@source_table為 nvarchar(386),預設值為 NULLOracle 發行者不支援@source_table

[ @destination_table = ] N'destination_table'

如果與 @source_table 或預存程式不同,則為目的地 (subscription) 資料表的名稱。 @destination_table為 sysname,預設值為 NULL。 如果設定為 NULL,這表示 @source_table 等於 @destination_table

[ @vertical_partition = ] N'vertical_partition'

啟用和停用數據表發行項的數據行篩選。 @vertical_partition為 nchar(5),預設值為 false

  • false 表示沒有垂直篩選併發佈所有數據行。

  • true 清除宣告的主鍵以外的所有數據行、不含預設值的可為 Null 數據行,以及唯一索引鍵數據行。 數據行會使用 sp_articlecolumn 來新增。

[ @type = ] N'type'

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

Description
aggregate schema only 僅含架構的聚合函數。
func schema only 僅具有架構的函式。
indexed view logbased 以記錄為基礎的索引檢視文章。 Oracle 發行者不支援。 針對這種類型的發行項,基表不需要個別發行。
indexed view logbased manualboth 具有手動篩選和手動檢視的記錄型索引檢視文章。 此選項需要您同時 指定@sync_object@filter 參數。 針對這種類型的發行項,基表不需要個別發行。 Oracle 發行者不支援。
indexed view logbased manualfilter 具有手動篩選的記錄型索引檢視發行項。 此選項需要您同時 指定@sync_object@filter 參數。 針對這種類型的發行項,基表不需要個別發行。 Oracle 發行者不支援。
indexed view logbased manualview 具有手動檢視的記錄型索引檢視發行項。 此選項需要您指定 @sync_object 參數。 針對這種類型的發行項,基表不需要個別發行。 Oracle 發行者不支援。
indexed view schema only 僅限架構的索引檢視表。 針對這種類型的發行項,也必須發佈基表。
logbased (預設值) 以記錄為基礎的發行項。
logbased manualboth 具有手動篩選和手動檢視的記錄型發行項。 此選項需要您同時 指定@sync_object@filter 參數。 Oracle 發行者不支援。
logbased manualfilter 具有手動篩選的記錄式發行項。 此選項需要您同時 指定@sync_object@filter 參數。 Oracle 發行者不支援。
logbased manualview 具有手動檢視的記錄型發行項。 此選項需要您指定 @sync_object 參數。 Oracle 發行者不支援。
proc exec 將預存程式的執行複寫至發行項的所有訂閱者。 Oracle 發行者不支援。 建議您使用可串行化 proc exec 選項,而不是 proc exec。 如需詳細資訊,請參閱在事務複製中發佈預存程序執行中的一節。 啟用異動數據擷取時無法使用。
proc schema only 僅限架構的程式。 Oracle 發行者不支援。
serializable proc exec 只有當預存程式是在可串行化交易的內容中執行時,才會復寫預存程序的執行。 Oracle 發行者不支援。

程序也必須在明確交易內執行,才能復寫程序執行。
view schema only 僅使用架構檢視。 Oracle 發行者不支援。 使用此選項時,您也必須發佈基表。

[ @filter = ] N'filter'

預存程式(以 FOR REPLICATION 建立)用來水平篩選數據表。 @filter為 nvarchar(386),預設值為 NULL。 您必須手動執行 sp_articleviewsp_articlefilter ,才能建立檢視和篩選預存程式。 如果不是 NULL,則不會建立篩選程式(假設預存程式是手動建立的)。

[ @sync_object = ] N'sync_object'

用來產生用來代表本文快照集之數據文件的數據表或檢視表名稱。 @sync_object為 nvarchar(386),預設值為 NULL。 如果 NULL為 , 則會呼叫 sp_articleview 來自動建立用來產生輸出檔案的檢視。 新增具有 sp_articlecolumn的任何數據行之後,就會發生這種情況。 NULL如果沒有 ,則不會建立檢視(假設檢視是手動建立的)。

[ @ins_cmd = ] N'ins_cmd'

複寫本文插入時所使用的複寫命令類型。 @ins_cmd為 nvarchar(255),而且可以是下列其中一個值。

Description
NONE 不採取任何動作。
CALL sp_MSins_<table> (預設值)

-或-

CALL custom_stored_procedure_name
呼叫要於訂閱者端執行的預存程式。 若要使用這個複寫方法,請使用 @schema_option 來指定自動建立預存程式,或在發行項之每個訂閱者的目的地資料庫中建立指定的預存程式。 <custom_stored_procedure> 是使用者建立預存程式的名稱。 sp_MSins_<table> 包含目的地數據表的名稱,取代 參數的_table 部分。 指定@destination_owner,其前面會加上目的地數據表名稱。 例如,對於 ProductCategory 訂閱者端架構所擁有的 Production 資料表,參數會是 CALL sp_MSins_ProductionProductCategory。 針對點對點復寫拓撲中的文章, <table> 會附加 GUID 值。 <custom_stored_procedure>更新訂閱者不支援指定 。
SQLNULL 複寫 INSERT 語句。 INSERT語句會提供發行項中發行之所有數據行的值。 此指令會在插入時複寫:

INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue)

如需詳細資訊,請參閱 交易式發行項 - 指定變更的傳播方式。

[ @del_cmd = ] N'del_cmd'

複寫本文刪除時所使用的複寫命令類型。 @del_cmd為 nvarchar(255),而且可以是下列其中一個值。

Description
NONE 不採取任何動作。
CALLsp_MSdel_<table> (預設值)

-或-

CALL <custom_stored_procedure_name>
呼叫要於訂閱者端執行的預存程式。 若要使用這個複寫方法,請使用 @schema_option 來指定自動建立預存程式,或在發行項之每個訂閱者的目的地資料庫中建立指定的預存程式。 <custom_stored_procedure> 是使用者建立預存程式的名稱。 sp_MSdel_<table> 包含目的地數據表的名稱,取代 參數的_table 部分。 指定@destination_owner,其前面會加上目的地數據表名稱。 例如,對於 ProductCategory 訂閱者端架構所擁有的 Production 資料表,參數會是 CALL sp_MSdel_ProductionProductCategory。 針對點對點復寫拓撲中的文章, <table> 會附加 GUID 值。 <custom_stored_procedure>更新訂閱者不支援指定 。
XCALL sp_MSdel_<table>

-或-

XCALL <custom_stored_procedure_name>
呼叫採用 XCALL 樣式參數的預存程式。 若要使用這個複寫方法,請使用 @schema_option 來指定自動建立預存程式,或在發行項之每個訂閱者的目的地資料庫中建立指定的預存程式。 不允許指定使用者建立的預存程式來更新訂閱者。
SQLNULL 複寫 DELETE 語句。 語句 DELETE 會提供所有主鍵數據行值。 這個指令會在刪除時複寫:

DELETE FROM <table name> WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue

如需詳細資訊,請參閱 交易式發行項 - 指定變更的傳播方式。

[ @upd_cmd = ] N'upd_cmd'

複寫本文更新時所使用的復寫命令類型。 @upd_cmd為 nvarchar(255),而且可以是下列其中一個值。

Description
NONE 不採取任何動作。
CALL sp_MSupd_<table>

-或-

CALL <custom_stored_procedure_name>
呼叫要於訂閱者端執行的預存程式。 若要使用這個複寫方法,請使用 @schema_option 來指定自動建立預存程式,或在發行項之每個訂閱者的目的地資料庫中建立指定的預存程式。
MCALL sp_MSupd_<table>

-或-

MCALL <custom_stored_procedure_name>
呼叫採用 MCALL 樣式參數的預存程式。 若要使用這個複寫方法,請使用 @schema_option 來指定自動建立預存程式,或在發行項之每個訂閱者的目的地資料庫中建立指定的預存程式。 <custom_stored_procedure> 是使用者建立預存程式的名稱。 sp_MSupd_<table> 包含目的地數據表的名稱,以取代 <table> 參數的一部分。 指定@destination_owner,其前面會加上目的地數據表名稱。 例如,對於 ProductCategory 訂閱者端架構所擁有的 Production 資料表,參數會是 MCALL sp_MSupd_ProductionProductCategory。 針對點對點復寫拓撲中的文章, <table> 會附加 GUID 值。 不允許指定使用者建立的預存程式來更新訂閱者。
SCALL sp_MSupd_<table> (預設值)

-或-

SCALL <custom_stored_procedure_name>
呼叫採用 SCALL 樣式參數的預存程式。 若要使用這個複寫方法,請使用 @schema_option 來指定自動建立預存程式,或在發行項之每個訂閱者的目的地資料庫中建立指定的預存程式。 <custom_stored_procedure> 是使用者建立預存程式的名稱。 sp_MSupd_<table> 包含目的地數據表的名稱,取代 參數的_table 部分。 指定@destination_owner,其前面會加上目的地數據表名稱。 例如,對於 ProductCategory 訂閱者端架構所擁有的 Production 資料表,參數會是 SCALL sp_MSupd_ProductionProductCategory。 針對點對點復寫拓撲中的文章, _table 會附加 GUID 值。 不允許指定使用者建立的預存程式來更新訂閱者。
XCALL sp_MSupd_<table>

-或-

XCALL <custom_stored_procedure_name>
呼叫採用 XCALL 樣式參數的預存程式。 若要使用這個複寫方法,請使用 @schema_option 來指定自動建立預存程式,或在發行項之每個訂閱者的目的地資料庫中建立指定的預存程式。 不允許指定使用者建立的預存程式來更新訂閱者。
SQLNULL 複寫 UPDATE 語句。 語句 UPDATE 會在所有數據行值和主鍵數據行值上提供。 此指令會在更新時復寫:

UPDATE <table name> SET c1 = c1value, SET c2 = c2value, SET cn = cnvalue WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue

注意

MCALLSCALLXCALL 的語法CALL會隨著傳播到訂閱者的數據量而有所不同。 語法 CALL 會傳遞所有插入和刪除數據行的所有值。 語法 SCALL 只會傳遞受影響數據行的值。 不論是否變更,語法 XCALL 都會傳遞所有數據行的值,包括數據行的先前值。 如需詳細資訊,請參閱 交易式發行項 - 指定變更的傳播方式。

[ @creation_script = ] N'creation_script'

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

[ @description = ] N'description'

發行項的描述性專案。 @description為 nvarchar(255),預設值為 NULL

[ @pre_creation_cmd = ] N'pre_creation_cmd'

指定當系統在套用本文快照集時,在訂閱者端偵測到相同名稱的現有物件時,應該執行的動作。 @pre_creation_cmd是 nvarchar(10),而且可以是下列其中一個值。

Description
none 不使用命令。
delete 在套用快照集之前,先從目的地數據表刪除數據。 水平篩選發行項時,只會刪除 filter 子句所指定數據行中的數據。 定義水準篩選條件時,不支援 Oracle 發行者。
drop (預設值) 卸除目的地數據表。
truncate 截斷目的地數據表。 對 ODBC 或 OLE DB 訂閱者無效。

[ @filter_clause = ] N'filter_clause'

定義水平篩選的限制 (WHERE) 子句。 輸入限制子句時,請省略關鍵詞 WHERE。 @filter_clause為 nvarchar(max),預設值為 NULL。 如需詳細資訊,請參閱篩選發行的資料

[ @schema_option = ] schema_option

指定發行項之架構產生選項的位掩碼。 @schema_option為 varbinary(8),預設值NULL為 ,而且可以是 |(位 OR)下列其中一或多個值的乘積:

注意

如果此值為 NULL,系統會根據其他發行項屬性自動產生發行項的有效架構選項。 [ 預設架構] 選項 會顯示將根據發行項類型和複寫類型的組合來選擇的值。

Description
0x00 停用 快照集代理程式 的腳本,並使用 @creation_script
0x01 產生物件建立腳本(CREATE TABLE、CREATE PROCEDURE 等等)。 此值是預存程式發行項的預設值。
0x02 如果已定義,產生傳播發行項變更的預存程式。
0x04 識別數據行是使用 IDENTITY 屬性編寫腳本。
0x08 復寫 時間戳數據 行。 如果未設定, 時間戳 數據行會復寫為 二進位檔。
0x10 產生對應的叢集索引。 即使未設定這個選項,如果在發行的數據表上已定義索引,也會產生與主鍵和唯一條件約束相關的索引。
0x201 將使用者定義資料類型 (UDT) 轉換為訂閱者端的基底數據類型。 如果 UDT 資料行是主鍵的一部分,或是計算數據行參考 UDT 資料行參考 UDT 資料行,則無法使用此選項。
0x40 產生對應的非叢集索引。 即使未設定這個選項,如果在發行的數據表上已定義索引,也會產生與主鍵和唯一條件約束相關的索引。
0x80 複寫主鍵條件約束。 任何與條件約束相關的索引也會復寫,即使選項 0x100x40 未啟用也一樣。
0x1001 如果已定義,則復寫數據表發行項上的使用者觸發程式。
0x2001 複寫外鍵條件約束。 如果參考的數據表不是發行集的一部分,則不會復寫已發行數據表上的所有外鍵條件約束。
0x4001 複寫檢查條件約束。
0x8001 複寫預設值。
0x1000 復寫數據行層級定序。

注意: 應該為 Oracle 發行者設定此選項,以啟用區分大小寫的比較。
0x20001 復寫與已發佈發行發行項來源對象相關聯的擴充屬性。
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 將大於 8000 位元組 的 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 (Transact-SQL)
0x4000000000 復寫數據表上任何篩選的索引。 如需已篩選索引的詳細資訊,請參閱建立篩選的索引 (機器翻譯)
0x8000000000 geographygeometry 數據類型轉換成 varbinary(max) ,以便將這些類型的數據行復寫至執行 SQL Server 2005 (9.x) 的訂閱者。
0x10000000000 復寫 geographygeometry 類型的數據行索引。
0x20000000000 復寫數據行的SPARSE屬性。 如需此屬性的詳細資訊,請參閱 使用疏鬆數據行
0x40000000000 啟用快照集代理程式的腳本,以在訂閱者上建立記憶體優化數據表。
0x80000000000 將叢集索引轉換為記憶體優化發行項的非叢集索引。
0x400000000000 復寫數據表上任何非叢集數據行存放區索引
0x800000000000 復寫數據表上任何篩選的非叢集數據行存放區索引。
NULL 復寫會自動將@schema_option設定為預設值,其值取決於其他發行項屬性。 一節中的「預設架構選項」數據表會根據發行項類型和復寫類型顯示預設架構選項。

非 SQL Server 發行集的預設值為 0x050D3

1 Oracle 發行者不支援。

並非所有@schema_option值都適用於每種類型的複寫和發行項類型。 <備註>一節中的 [有效架構選項] 數據表會顯示可以根據發行項類型和復寫類型的組合選擇的有效架構選項。

[ @destination_owner = ] N'destination_owner'

目的地對象的擁有者名稱。 @destination_owner為 sysname,預設值為 NULL。 未指定@destination_owner,會根據下列規則自動指定擁有者:

Condition 目的地物件擁有者
發行集會使用原生模式大量複製來產生初始快照集,僅支援 SQL Server 訂閱者。 預設為 @source_owner的值
從非 SQL Server 發行者發行。 預設為目的地資料庫的擁有者。
發行集使用字元模式大量複製來產生支援非 SQL Server 訂閱者的初始快照集。 未指派。

若要支援非 SQL Server 訂閱者, @destination_owner 必須是 NULL

[ @status = ] status

指定發行項是否為使用中,以及傳播變更的其他選項。 @status是 tinyint,而且可以是 |(位 OR)其中一或多個值的乘積。

Description
1 文章為使用中。
8 在語句中包含 INSERT 數據行名稱。
16 (預設值) 使用參數化語句。
24 在語句中包含 INSERT 數據行名稱,並使用參數化語句。
64 僅供參考之用。 不支援。 我們無法保證未來的相容性。

例如,使用參數化語句的作用中發行項在此數據行中會有的值 17 。 的值 0 表示發行項為非使用中,且未定義其他屬性。

[ @source_owner = ] N'source_owner'

來源對象的擁有者。 @source_owner為 sysname,預設值為 NULL您必須為 Oracle 發行者指定@source_owner。

[ @sync_object_owner = ] N'sync_object_owner'

定義已發佈發行項之檢視的擁有者。 @sync_object_owner為 sysname,預設值為 NULL

[ @filter_owner = ] N'filter_owner'

篩選條件的擁有者。 @filter_owner為 sysname 預設值為 NULL

[ @source_object = ] N'source_object'

要發佈的資料庫物件。 @source_object為 sysname,預設值為 NULL。 如果 @source_tableNULL則@source_object 不能為 NULL應該使用 @source_object,而不是使用 @source_table。 如需可使用快照式或事務複製發行之物件類型的詳細資訊,請參閱 發行數據和資料庫物件

[ @artid = ] artid OUTPUT

新發行項的發行項標識碼。 @artid是 int 類型的 OUTPUT 參數。

[ @auto_identity_range = ] N'auto_identity_range'

在建立發行集時,啟用和停用發行集上的自動識別範圍處理。 @auto_identity_range為 nvarchar(5),可以是下列其中一個值:

Description
true 啟用自動識別範圍處理
false 停用自動識別範圍處理
NULL (預設值) 識別範圍處理是由@identityrangemanagementoption設定。

注意

@auto_identity_range已被取代,且僅提供回溯相容性。 您應該使用 @identityrangemanagementoption 來指定身分識別範圍管理選項。 如需詳細資訊,請參閱複寫識別資料欄

[ @pub_identity_range = ] pub_identity_range

如果發行項@identityrangemanagementoption設為 auto@auto_identity_range設為 true,則控制發行者的範圍大小。 @pub_identity_range為 bigint,預設值為 NULLOracle 發行者不支援@pub_identity_range

[ @identity_range = ] identity_range

如果發行項@identityrangemanagementoption設為 auto@auto_identity_range設為 true,則控制訂閱者的範圍大小。 @identity_range為 bigint,預設值為 NULL。 當@auto_identity_range設定為 true使用。 Oracle 發行者不支援@identity_range。

[ @threshold = ] 閾值

控制 散發代理程式 指派新識別範圍的百分比值。 使用@threshold中指定的值百分比時,散發代理程式 會建立新的識別範圍。 @threshold為 int,預設值為 NULL。 當@identityrangemanagementoption設定為 auto@auto_identity_range 設為 true使用。 Oracle 發行者不支援@threshold

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

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

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

  • 1 指定新增發行項可能會導致快照集無效,而且如果存在需要新快照集的訂閱,則會授與現有快照集標示為過時的許可權,併產生新的快照集。

[ @use_default_datatypes = ] use_default_datatypes

從 Oracle 發行者發行發行發行項時,是否使用預設數據行數據類型對應。 @use_default_datatypes為 bit,預設值為 1

當@use_default_datatypes設定為 0,您必須針對從預設值變更的每個數據行對應執行sp_changearticlecolumndatatype一次。 定義所有自定義數據行對應之後,您必須執行 sp_articleview

注意

此參數只應該用於 Oracle 發行者。 將 SQL Server 發行者設定0為 @use_default_datatypes 會產生錯誤。

[ @identityrangemanagementoption = ] N'identityrangemanagementoption'

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

Description
none 複寫不會進行明確的識別範圍管理。 只有在舊版 SQL Server 回溯相容性時,才建議使用此選項。 不允許對等複寫。
manual 使用 NOT FOR REPLICATION 標記識別數據行,以啟用手動識別範圍處理。
auto 指定識別範圍的自動管理。
NULL (預設值) none當 @auto_identity_range 的值不是 true時,預設值為 。 默認為 manual 對等拓撲預設值 (會忽略@auto_identity_range )。

為了回溯相容性,當 @identityrangemanagementoption的值NULL時,會檢查 @auto_identity_range的值。 不過,當 @identityrangemanagementoption的值不是 NULL時,則會忽略@auto_identity_range的值

如需詳細資訊,請參閱複寫識別資料欄

[ @publisher = ] N'publisher'

指定非 SQL Server 發行者。 @publisher為 sysname,預設值為 NULL

將發行項新增至 SQL Server 發行者時,不應該使用@publisher

[ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot'

如果在套用初始快照集時執行複寫的使用者觸發程式。 @fire_triggers_on_snapshot為 nvarchar(5),預設值為 falsetrue 表示套用快照集時,會執行復寫數據表上的使用者觸發程式。 若要復寫觸發程式,@schema_option位元遮罩值必須包含 值 0x100

傳回碼值

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

備註

sp_addarticle 用於快照式複寫或事務複製。

根據預設,當復寫不支援數據行數據類型時,複寫不會發佈源數據表中的任何數據行。 如果您需要發佈這類數據行,您必須執行 sp_articlecolumn 以新增數據行。

將發行項新增至支援點對點事務複製的發行集時,適用下列限制:

  • 所有記錄式發行項都必須指定參數化語句。 您必須在 16 @status 值中包含

  • 目的地數據表的名稱和擁有者必須符合源數據表。

  • 無法水平或垂直篩選發行項。

  • 不支援自動識別範圍管理。 您必須為 @identityrangemanagementoption 指定手動值。

  • 如果數據表中有時間戳數據行,您必須在 @schema_option 中包含0x08,才能將數據行復寫為時間戳

  • 無法針對@ins_cmd@upd_cmd@del_cmd指定 值SQL

如需詳細資訊,請參閱 點對點 - 事務複製

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

如果@vertical_partition設定為 truesp_addarticle則會延遲檢視的建立,直到呼叫sp_articleview為止(新增最後個sp_articlecolumn之後)。

如果發行集允許更新訂閱,且發行的數據表沒有 uniqueidentifier 數據行,sp_addarticle則會自動將 uniqueidentifier 數據行新增至數據表。

復寫至不是 SQL Server 實例的訂閱者時(異質複寫),只有 、 UPDATEDELETE 命令僅INSERT支援 Transact-SQL 語句。

當記錄讀取器代理程序執行時,將發行項加入對等發行集可能會導致記錄讀取器代理程式與加入發行項的程式發生死結。 若要避免此問題,在將發行項新增至對等發行集之前,請使用複寫監視器來停止您要新增發行項之節點上的記錄讀取器代理程式。 新增發行項之後,請重新啟動記錄讀取器代理程式。

將 @del_cmd 設定NONE@ins_cmd NONE 時,當發生系結更新時,命令的UPDATE傳播也可能受到未傳送這些命令的影響。 (限定更新是從發行者復寫為DELETE/INSERT訂閱者配對的語句類型。UPDATE

默認架構選項

下表描述使用者未指定@schema_options時,複寫所設定的預設值,其中此值取決於複寫類型(顯示在頂端)和發行項類型(如第一欄所示)。

發行項類型 異動複寫 快照式複寫
僅限匯總架構 0x01 0x01
僅限 func 架構 0x01 0x01
僅限索引檢視架構 0x01 0x01
索引檢視記錄基底 0x30F3 0x3071
索引檢視記錄基底手動索引 0x30F3 0x3071
索引檢視記錄式手動篩選 0x30F3 0x3071
索引檢視記錄式手動檢視 0x30F3 0x3071
logbased 0x30F3 0x3071
logbased manualfilter 0x30F3 0x3071
logbased manualview 0x30F3 0x3071
proc exec 0x01 0x01
僅限 proc 架構 0x01 0x01
serializable proc exec 0x01 0x01
僅限檢視架構 0x01 0x01

注意

如果發行集已啟用佇列更新, 則會將的@schema_option0x80 新增至數據表中顯示的預設值。 非 SQL Server 發行集的預設@schema_option為 0x050D3

有效的架構選項

下表描述根據複寫類型(顯示在頂端)和發行項類型(如第一個數據行所示)的可允許值 @schema_option

發行項類型 異動複寫 快照式複寫
logbased 所有選項 所有選項,但 0x02
logbased manualfilter 所有選項 所有選項,但 0x02
logbased manualview 所有選項 所有選項,但 0x02
索引檢視記錄基底 所有選項 所有選項,但 0x02
索引檢視記錄式手動篩選 所有選項 所有選項,但 0x02
索引檢視記錄式手動檢視 所有選項 所有選項,但 0x02
索引檢視記錄基底手動索引 所有選項 所有選項,但 0x02
proc exec 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
serializable proc exec 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
僅限 proc 架構 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
僅限檢視架構 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000
僅限 func 架構 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
僅限索引檢視架構 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000

注意

針對已排入佇列的更新發行集,必須啟用 和 0x80@schema_option值0x8000。 非 SQL Server 發行集支援的@schema_option值為:0x01、、0x100x020x40、、0x800x10000x40000X8000

範例

DECLARE @publication    AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL'; 
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';

-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema 
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @table, 
    @source_object = @table,
    @source_owner = @schemaowner, 
    @schema_option = 0x80030F3,
    @vertical_partition = N'true', 
    @type = N'logbased',
    @filter_clause = @filterclause;

-- (Optional) Manually call the stored procedure to create the 
-- horizontal filtering stored procedure. Since the type is 
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter 
    @publication = @publication, 
    @article = @table, 
    @filter_clause = @filterclause, 
    @filter_name = @filtername;

-- Add all columns to the article.
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table;

-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn 
    @publication = @publication, 
    @article = @table, 
    @column = N'DaysToManufacture', 
    @operation = N'drop';

-- (Optional) Manually call the stored procedure to create the 
-- vertical filtering view. Since the type is 'logbased', 
-- this stored procedures is executed automatically.
EXEC sp_articleview 
    @publication = @publication, 
    @article = @table,
    @filter_clause = @filterclause;
GO

權限

只有系統管理員固定伺服器角色或db_owner固定資料庫角色的成員才能執行 sp_addarticle