sp_addarticle (Transact-SQL)
更新: 2006 年 4 月 14 日
建立一個發行項,將它加入發行集中。這個預存程序執行於發行集資料庫的發行者端。
語法
sp_addarticle [ @publication = ] 'publication'
, [ @article = ] 'article'
[ , [ @source_table = ] 'source_table' ]
[ , [ @destination_table = ] 'destination_table' ]
[ , [ @vertical_partition = ] 'vertical_partition' ]
[ , [ @type = ] 'type' ]
[ , [ @filter = ] 'filter' ]
[ , [ @sync_object= ] 'sync_object' ]
[ , [ @ins_cmd = ] 'ins_cmd' ]
[ , [ @del_cmd = ] 'del_cmd' ]
[ , [ @upd_cmd = ] 'upd_cmd' ]
[ , [ @creation_script = ] 'creation_script' ]
[ , [ @description = ] 'description' ]
[ , [ @pre_creation_cmd = ] 'pre_creation_cmd' ]
[ , [ @filter_clause = ] 'filter_clause' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @destination_owner = ] 'destination_owner' ]
[ , [ @status = ] status ]
[ , [ @source_owner = ] 'source_owner' ]
[ , [ @sync_object_owner = ] 'sync_object_owner' ]
[ , [ @filter_owner = ] 'filter_owner' ]
[ , [ @source_object = ] 'source_object' ]
[ , [ @artid = ] article_ID OUTPUT ]
[ , [ @auto_identity_range = ] '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 = ] identityrangemanagementoption ]
[ , [ @publisher = ] 'publisher' ]
[ , [ @fire_triggers_on_snapshot = ] 'fire_triggers_on_snapshot' ]
引數
- [ @publication = ] 'publication'
這是發行項所在的發行集名稱。這個名稱在資料庫中必須是唯一的。publication 是 sysname,沒有預設值。
- [ @article = ] 'article'
這是發行項的名稱。這個名稱在發行集內必須是唯一的。article 是 sysname,沒有預設值。
- [ @source_table = ] 'source_table'
這個參數已被取代,支援它的目的,只是為了與舊版的指令碼相容;請改用 source_object。不支援 Oracle 發行者使用這個參數。
- [ @destination_table = ] 'destination_table'
如果目的地 (訂閱) 資料表有別於 source_table 或預存程序,這便是目的地 (訂閱) 資料表的名稱。destination_table 是 sysname,預設值是 NULL,這表示 source_table 等於 destination_table。**
[ @vertical_partition = ] 'vertical_partition'
在資料表發行項上,啟用和停用資料行的篩選。vertical_partition 是 nchar(5),預設值是 FALSE。false 表示沒有垂直篩選,會發行所有資料行。
true 會清除已宣告的主索引鍵、不含預設值且可為 Null 的資料行及唯一索引鍵資料行之外的所有資料行。資料行是利用 sp_articlecolumn 來加入的。
[ @type = ] 'type'
這是發行項的類型。type 是 sysname,它可以是下列值之一。值 描述 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 schema only
只含結構描述的程序。不支援 Oracle 發行者使用這個值。
serializable proc exec
只在預存程序是執行於可序列化交易的環境之內時,才複寫執行預存程序。不支援 Oracle 發行者使用這個值。
view schema only
只含結構描述的檢視。不支援 Oracle 發行者使用這個值。使用此選項時,您也必須發行基底資料表。
- [ @filter = ] 'filter'
這是用來水平篩選資料表的預存程序 (利用 FOR REPLICATION 來建立)。filter 是 nvarchar(386),預設值是 NULL。您必須手動執行 sp_articleview 和 sp_articlefilter 來建立檢視和篩選預存程序。如果不是 NULL,便不會建立篩選程序 (假設預存程序是手動建立)。
- [ @sync_object = ] 'sync_object'
這是用來產生資料檔,以代表這個發行項之快照集的資料表或檢視名稱。sync_object 是 nvarchar(386),預設值是 NULL。如果是 NULL,便會呼叫 sp_articleview 來自動建立用來產生輸出檔的檢視。這發生在利用 sp_articlecolumn 來加入任何資料行之後。如果不是 NULL,便不會建立檢視 (假設檢視是手動建立)。
[ @ins_cmd = ] 'ins_cmd'
這是複寫這個發行項的插入時,所用的複寫命令類型。ins_cmd 是 nvarchar(255),它可以是下列值之一。值 描述 NONE
不採取任何動作。
CALL sp_MSins_table (預設值)
- 或 -
CALL custom_stored_procedure_name
呼叫要在訂閱者端執行的預存程序。若要使用這個複寫方法,請利用 schema_option 來指定自動建立預存程序,或在發行項每個訂閱者的目的地資料庫中建立指定的預存程序。custom_stored_procedure 是使用者建立之預存程序的名稱。sp_MSins_table 在參數的 _table 部分,包含目的地資料表的名稱。當指定 destination_owner 時,會將它附加在目的地資料表名稱前面。例如,如果是訂閱者端之 Production 結構描述所擁有的 ProductCategory 資料表,則參數為
CALL sp_MSins_ProductionProductCategory
。如果是點對點複寫拓撲中的發行項,_table 會附加 GUID 值。當更新訂閱者時,不支援指定 custom_stored_procedure。SQL 或 NULL
複寫 INSERT 陳述式。提供發行項中所發行之所有資料行的值給 INSERT 陳述式。插入時複寫這個命令:
INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue)
如需詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
[ @del_cmd =] 'del_cmd'
這是複寫這個發行項的刪除時,所用的複寫命令類型。del_cmd 是 nvarchar(255),它可以是下列值之一。值 描述 NONE
不採取任何動作。
CALLsp_MSdel_table (預設值)
- 或 -
CALL custom_stored_procedure_name
呼叫要在訂閱者端執行的預存程序。若要使用這個複寫方法,請利用 schema_option 來指定自動建立預存程序,或在發行項每個訂閱者的目的地資料庫中建立指定的預存程序。custom_stored_procedure 是使用者建立之預存程序的名稱。sp_MSdel_table 在參數的 _table 部分,包含目的地資料表的名稱。當指定 destination_owner 時,會將它附加在目的地資料表名稱前面。例如,如果是訂閱者端之 Production 結構描述所擁有的 ProductCategory 資料表,則參數為
CALL sp_MSdel_ProductionProductCategory
。如果是點對點複寫拓撲中的發行項,_table 會附加 GUID 值。當更新訂閱者時,不支援指定 custom_stored_procedure。XCALL sp_MSdel_table
- 或 -
XCALL custom_stored_procedure_name
以 XCALL 樣式參數來呼叫預存程序。若要使用這個複寫方法,請利用 schema_option 來指定自動建立預存程序,或在發行項每個訂閱者的目的地資料庫中建立指定的預存程序。當更新訂閱者時,不允許指定使用者建立的預存程序。
SQL 或 NULL
複寫 DELETE 陳述式。提供所有主索引鍵資料行值給 DELETE 陳述式。刪除時複寫這個命令:
DELETE FROM <table name> WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue
如需詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
[ @upd_cmd =] 'upd_cmd'
這是複寫這個發行項的更新時,所用的複寫命令類型。upd_cmd 是 nvarchar(255),它可以是下列值之一。值 描述 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 時,會將它附加在目的地資料表名稱前面。例如,如果是訂閱者端之 Production 結構描述所擁有的 ProductCategory 資料表,則參數為
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 時,會將它附加在目的地資料表名稱前面。例如,如果是訂閱者端之 Production 結構描述所擁有的 ProductCategory 資料表,則參數為
SCALL sp_MSupd_ProductionProductCategory
。如果是點對點複寫拓撲中的發行項,_table 會附加 GUID 值。當更新訂閱者時,不允許指定使用者建立的預存程序。XCALL sp_MSupd_table
- 或 -
XCALL custom_stored_procedure_name
以 XCALL 樣式參數來呼叫預存程序。若要使用這個複寫方法,請利用 schema_option 來指定自動建立預存程序,或在發行項每個訂閱者的目的地資料庫中建立指定的預存程序。當更新訂閱者時,不允許指定使用者建立的預存程序。
SQL 或 NULL
複寫 UPDATE 陳述式。在所有資料行值及主索引鍵資料行值上,提供 UPDATE 陳述式。更新時複寫這個命令:
UPDATE <table name> SET c1 = c1value, SET c2 = c2value, SET cn = cnvalue WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue
附註: CALL、MCALL、SCALL 和 XCALL 語法會隨著傳播給訂閱者的資料量而不同。CALL 語法會傳遞所有插入和刪除資料行的值。SCALL 語法只會傳遞受影響資料行的值。XCALL 語法會傳遞所有資料行的值,不論是否變更過,其中包括資料行先前的值。如需詳細資訊,請參閱<指定交易式發行項變更的傳播方式>。
- [ @creation_script =] 'creation_script'
這是在訂閱資料庫中,用來建立發行項的選擇性發行項結構描述指令碼的路徑和名稱。creation_script 是 nvarchar(255),預設值是 NULL。
- [ @description =] 'description'
這是發行項的描述性項目。description 是 nvarchar(255),預設值是 NULL。
[ @pre_creation_cmd =] 'pre_creation_cmd'
指定如果在套用這個發行項的快照集時,在訂閱者端偵測到現有的同名物件,系統應該採取的動作。pre_creation_cmd 是 nvarchar(10),它可以是下列值之一。值 描述 none
不使用命令。
delete
在套用快照集之前,從目的地資料表中刪除資料。當水平篩選發行項時,只刪除篩選子句指定的資料行中之資料。當定義水平篩選時,不支援 Oracle 發行者使用這個值。
drop (預設值)
卸除目的地資料表。
truncate
截斷目的地資料表。對 ODBC 或 OLE DB 訂閱者無效。
- [ @filter_clause=] 'filter_clause'
這是定義水平篩選的限制 (WHERE) 子句。當輸入限制子句時,請省略 WHERE 關鍵字。filter_clause 是 ntext,預設值是 NULL。如需詳細資訊,請參閱<篩選發行的資料>。
[ @schema_option =] schema_option
這是給定的發行項之結構描述產生選項位元遮罩。schema_option 是 binary(8),它可以是一個或多個這些值的 | (位元 OR) 結果:附註: 如果這個值是 NULL,系統會相依於其他發行項屬性,自動產生發行項的有效結構描述選項。「備註」一節所提供的預設結構描述選項資料表會顯示將根據發行項類型和複寫類型的組合來選擇的值。 值
[ @destination_owner =] 'destination_owner'
這是目的地物件擁有者的名稱。destination_owner 是 sysname,預設值是 NULL。當未指定 destination_owner 時,便會自動根據下列規則來指定擁有者:條件 目的地物件擁有者 發行集利用原生模式大量複製來產生初始快照集,這只支援 SQL Server 訂閱者。
預設為 source_owner 的值。
從非 SQL Server 發行者發行。
預設為目的地資料庫的擁有者。
發行集利用字元模式大量複製來產生初始快照集,這支援非 SQL Server 訂閱者。
未指派。
若要支援非 SQL Server 訂閱者,destination_owner 必須是 NULL。
[ @status=] status
指定發行項是否在使用中,以及如何傳播變更的其他選項。status 是 tinyint,它可以是一個或多個這些值的 | (位元 OR) 結果。值
- [ @source_owner =] 'source_owner'
這是來源物件的擁有者。source_owner 是 sysname,預設值是 NULL。Oracle 發行者必須指定 source_owner。
- [ @sync_object_owner =] 'sync_object_owner'
這是定義已發行的發行項之檢視的擁有者。sync_object_owner 是 sysname,預設值是 NULL。
- [ @filter_owner =] 'filter_owner'
這是篩選的擁有者。filter_owner 是 sysname,預設值是 NULL。
- [ @source_object =] 'source_object'
這是要發行的資料庫物件。source_object 是 sysname,預設值是 NULL。如果 source_table 是 NULL,source_object 不能是 NULL。source_object 應該用來取代 source_table。如需有關能夠利用快照集或交易式複寫來發行之物件類型的詳細資訊,請參閱<發行資料和資料庫物件>。
- [ @artid = ] article_ID OUTPUT
這是新發行項的發行項識別碼。article_ID 是 int,預設值是 NULL,它是一個 OUTPUT 參數。
[ @auto_identity_range = ] 'auto_identity_range'
在發行集建立之時,啟用和停用發行集的自動識別範圍處理。auto_identity_range 是 nvarchar(5),它可以是下列值之一:值 描述 true
啟用自動識別範圍處理
false
停用自動識別範圍處理
NULL (預設值)
識別範圍的處理是 identityrangemanagementoption 所設定的。
附註: auto_identity_range 已被取代,提供這個項目的目的,只是為了與舊版相容。您應該利用 identityrangemanagementoption 來指定識別範圍管理選項。如需詳細資訊,請參閱<複寫識別資料行>。
- [ @pub_identity_range = ] pub_identity_range
當發行項的 identityrangemanagementoption 設定為 auto 或 auto_identity_range 設定為 true 時,控制在發行者端的範圍大小。pub_identity_range 是 bigint,預設值是 NULL。不支援 Oracle 發行者使用這個值。
- [ @identity_range = ] identity_range
當發行項的 identityrangemanagementoption 設定為 auto 或 auto_identity_range 設定為 true 時,控制在訂閱者端的範圍大小。identity_range 是 bigint,預設值是 NULL。使用於 auto_identity_range 設為 true 時。不支援 Oracle 發行者使用這個值。
- [ @threshold = ] threshold
這是一個百分比值,用來控制散發代理程式指派新識別範圍的時機。當使用 threshold 指定的百分比值時,散發代理程式會建立新的識別範圍。threshold 是 bigint,預設值是 NULL。使用時機是 identityrangemanagementoption 設為 auto,或者 auto_identity_range 設定 true 之時。不支援 Oracle 發行者使用這個值。
[ @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。1 = 使用預設發行項資料行對應。您可以執行 sp_getdefaultdatatypemapping 來顯示預設資料類型對應。
0 = 定義自訂發行項資料行對應,因此,sp_articleview 不呼叫 sp_addarticle。
當 use_default_datatypes 設定為 0 時,對於每個已變更了預設值的資料行對應,您都必須執行一次 sp_changearticlecolumndatatype。定義好所有自訂資料行對應之後,您必須執行 sp_articleview。
附註: 這個參數只應用於 Oracle 發行者。將 SQL Server 發行者的 use_default_datatypes 設定為 0,會產生一則錯誤。
[ @identityrangemanagementoption = ] identityrangemanagementoption
指定如何處理發行項的識別範圍管理。identityrangemanagementoption 是 nvarchar(10),而且可以是下列其中一個值。值 描述 none
複寫未執行明確識別範圍管理。建議您只將這個選項用於與舊版 SQL Server 的回溯相容性。對等複寫不允許這個值。
manual
利用 NOT FOR REPLICATION 來標示識別資料行,以啟用手動的識別範圍處理。
auto
指定自動管理識別範圍。
NULL (預設值)
當 auto_identity_range 值不是 true 時,預設為 none。在點對點拓撲預設值 (忽略 auto_identity_range) 中,預設為 manual。
為了與舊版相容,當 identityrangemanagementoption 值是 NULL 時,會檢查 auto_identity_range 值。不過,當 identityrangemanagementoption 值不是 NULL 時,則會忽略 auto_identity_range 值*。*
如需詳細資訊,請參閱<複寫識別資料行>。
[ @publisher = ] 'publisher'
指定非 SQL Server 發行者。publisher 是 sysname,預設值是 NULL。附註: 將發行項加入 SQL Server 發行者時,不應使用 publisher。
- [ @fire_triggers_on_snapshot = ] 'fire_triggers_on_snapshot'
這是指在套用初始快照集時,是否執行複寫的使用者觸發程序。fire_triggers_on_snapshot 是 nvarchar(5),預設值是 FALSE。true 表示在套用快照集時,執行複寫的資料表之使用者觸發程序。為了複寫觸發程序,schema_option 的位元遮罩值必須包括 0x100 值。
傳回碼值
0 (成功) 或 1 (失敗)
備註
sp_addarticle 用於快照式複寫或交易式複寫中。
依預設,當複寫不支援資料行資料類型時,複寫不會在來源資料表中發行任何資料行。如果您需要發行這類資料行,您必須執行 sp_articlecolumn 來加入資料行。如需詳細資訊,請參閱<所有類型複寫的考量>。
當您將發行項加入支援點對點交易式複寫的發行集時,適用下列限制:
- 所有 logbased 發行項都必須指定參數化的陳述式。您必須將 16 併入 status 值中。
- 目的地資料表的名稱和擁有者必須符合來源資料表。
- 發行項不能進行水平或垂直篩選。
- 不支援自動識別範圍管理。您必須指定 identityrangemanagementoption 的 manual 值。
- 如果資料表中有 timestamp 資料行存在,您就必須在 schema_option 中併入 0x08,以便將資料行複寫成 timestamp。
- 不能針對 ins_cmd、upd_cmd 及 del_cmd 指定 SQL 值。
如需詳細資訊,請參閱<點對點交易式複寫>。
當您發行物件時,它們的定義會複製到訂閱者。如果您發行相依於一或多個其他物件的資料庫物件,您就必須發行所有參考的物件。例如,如果您發行相依於資料表的檢視,您也必須發行這份資料表。
如果 vertical_partition 設定為 true,sp_addarticle 會延遲建立檢視,直到呼叫 sp_articleview 為止 (在加入最後一個 sp_articlecolumn 之後)。
如果發行集允許更新訂閱,且所發行的資料表沒有 uniqueidentifier 資料行,sp_addarticle 會自動將 uniqueidentifier 資料行加入資料表中。
如果是支援可轉換訂閱的發行項,便會忽略指定給 ins_cmd、del_cmd 及 upd_cmd 的值。
預設結構描述選項
下表描述使用者未指定 schema_options 時,複寫所設定的預設值,這個值會隨著複寫類型 (顯示在頂端) 和發行項類型 (顯示在第一個資料行之下) 而不同。
發行項類型 | 複寫類型 | |
---|---|---|
|
交易式 |
快照集 |
aggregate schema only |
0x01 |
0x01 |
func schema only |
0x01 |
0x01 |
indexed view schema only |
0x01 |
0x01 |
indexed view logbased |
0x30F3 |
0x3071 |
indexed view logbase manualboth |
0x30F3 |
0x3071 |
indexed view logbased manualfilter |
0x30F3 |
0x3071 |
indexed view logbased manualview |
0x30F3 |
0x3071 |
logbased |
0x30F3 |
0x3071 |
logbased manualfilter |
0x30F3 |
0x3071 |
logbased manualview |
0x30F3 |
0x3071 |
proc exec |
0x01 |
0x01 |
proc schema only |
0x01 |
0x01 |
serialized proc exec |
0x01 |
0x01 |
view schema only |
0x01 |
0x01 |
附註: |
---|
如果啟用了佇列更新的發行集,便會將 0x80 的 schema_option 值加入表格所顯示的預設值。非 SQL Server 發行集的預設 schema_option 是 0x050D3。 |
有效結構描述選項
下表描述以複寫類型 (顯示在頂端) 和發行項類型 (顯示在第一個資料行之下) 為基礎,schema_option 所能使用的值。
發行項類型 | 複寫類型 | |
---|---|---|
|
交易式 |
快照集 |
logbased |
所有選項 |
0x02 以外的所有選項 |
logbased manualfilter |
所有選項 |
0x02 以外的所有選項 |
logbased manualview |
所有選項 |
0x02 以外的所有選項 |
indexed view logbased |
所有選項 |
0x02 以外的所有選項 |
indexed view logbased manualfilter |
所有選項 |
0x02 以外的所有選項 |
indexed view logbased manualview |
所有選項 |
0x02 以外的所有選項 |
indexed view logbase manualboth |
所有選項 |
0x02 以外的所有選項 |
proc exec |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
serialized proc exec |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
proc schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
view schema only |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
func schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
indexed view schema only |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
0x01、0x010、0x020、0x040、0x0100、0x2000、0x40000、0x100000、0x200000、0x400000、0x800000、0x2000000、0x8000000、0x40000000 和 0x80000000 |
附註: |
---|
如果是佇列更新發行集,您必須啟用 0x8000 和 0x80 這兩個 schema_option 值。以下是支援之非 SQL Server 發行集的 schema_option 值:0x01、0x02、0x10、0x40、0x80、0x1000、0x4000 和 0X8000。 |
權限
只有系統管理員 (sysadmin) 固定伺服器角色或 db_owner 固定資料庫角色的成員,才能夠執行 sp_addarticle。
範例
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
請參閱
參考
sp_articlecolumn (Transact-SQL)
sp_articlefilter (Transact-SQL)
sp_articleview (Transact-SQL)
sp_changearticle (Transact-SQL)
sp_droparticle (Transact-SQL)
sp_helparticle (Transact-SQL)
sp_helparticlecolumns (Transact-SQL)
複寫預存程序 (Transact-SQL)
其他資源
How to: Define an Article (Replication Transact-SQL Programming)
發行資料和資料庫物件
說明及資訊
變更歷程記錄
版本 | 歷程記錄 |
---|---|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|