sp_addarticle (Transact-SQL)

建立一個發行項,將它加入發行集中。 這個預存程序執行於發行集資料庫的發行者端。

主題連結圖示 Transact-SQL 語法慣例

語法

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 發行者使用這個值。 建議您使用 serializable proc exec 而非 proc exec 選項。 如需詳細資訊,請參閱<在異動複寫中發行預存程序執行>中的「預存程序執行發行項的類型」一節。 異動資料擷取啟用時無法使用。

    proc schema only

    只含結構描述的程序。 不支援 Oracle 發行者使用這個值。

    serializable proc exec

    只在預存程序是執行於可序列化交易的環境之內時,才複寫執行預存程序。 不支援 Oracle 發行者使用這個值。

    也必須針對要複寫的程序執行,在明確交易中執行程序。

    view schema only

    只含結構描述的檢視。 不支援 Oracle 發行者使用這個值。 使用此選項時,您也必須發行基底資料表。

  • [ @filter = ] 'filter'
    這是用來水平篩選資料表的預存程序 (使用 FOR REPLICATION 建立)。 filter 是 nvarchar(386),預設值是 NULL。 您必須手動執行 sp_articleviewsp_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

    不採取任何動作。

    CALL sp_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),而且可以是下列其中一個值。

    描述

    不使用命令。

    刪除

    在套用快照集之前,從目的地資料表中刪除資料。 當水平篩選發行項時,只刪除篩選子句指定的資料行中之資料。 當定義水平篩選時,不支援 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,系統會相依於其他發行項屬性,自動產生發行項的有效結構描述選項。 「備註」一節所提供的預設結構描述選項資料表會顯示將根據發行項類型和複寫類型的組合來選擇的值。

    描述

    0x00

    停用快照集代理程式的指令碼,使用 creation_script。

    0x01

    產生物件建立指令碼 (CREATE TABLE、CREATE PROCEDURE 等)。 這個值是預存程序發行項的預設值。

    0x02

    如果已定義的話,便產生傳播發行項變更的預存程序。

    0x04

    識別欄位的指令碼是利用 IDENTITY 屬性來編寫的。

    0x08

    複寫 timestamp 資料行。 如果未設定,timestamp 資料行會複寫為 binary。

    0x10

    產生對應的叢集索引。 即使未設定這個選項,如果已發行的資料表上已經有定義與主索引鍵和唯一條件約束有關的索引,仍會產生這些索引。

    0x20

    在訂閱者端將使用者定義資料類型 (UDT) 轉換成基底資料型別。 如果 UDT 資料行是主索引鍵的一部分或計算資料行參考 UDT 資料行,則當 UDT 資料行中有 CHECK 或 DEFAULT 條件約束時,就不能使用這個選項。 不支援 Oracle 發行者使用這個值

    0x40

    產生對應的非叢集索引。 即使未設定這個選項,如果已發行的資料表上已經有定義與主索引鍵和唯一條件約束有關的索引,仍會產生這些索引。

    0x80

    複寫主索引鍵條件約束。 即使未啟用 0x100x40 選項,也會複寫與此條件約束有關的任何索引。

    0x100

    複寫資料表發行項的使用者觸發程序 (如果定義的話)。 不支援 Oracle 發行者使用這個值

    0x200

    複寫外部索引鍵條件約束。 如果參考的資料表不是發行集的一部份,便不會複寫發行資料表的所有外部索引鍵條件約束。 不支援 Oracle 發行者使用這個值

    0x400

    複寫 CHECK 條件約束。 不支援 Oracle 發行者使用這個值

    0x800

    複寫預設值。 不支援 Oracle 發行者使用這個值

    0x1000

    複寫資料行層級定序。

    [!附註]

    您應該設定 Oracle 發行者的這個選項來啟用區分大小寫的比較。

    0x2000

    複寫與已發行之發行項來源物件相關聯的擴充屬性。 不支援 Oracle 發行者使用這個值

    0x4000

    複寫 UNIQUE 條件約束。 即使未啟用 0x100x40 選項,也會複寫與此條件約束有關的任何索引。

    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

    將大於 8000 個位元組的 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 類型之資料行的索引。

    0x20000000000

    複寫資料行的 SPARSE 屬性。 如需有關這個屬性的詳細資訊,請參閱<使用疏鬆資料行>。

    NULL

    複寫將 schema_option 自動設成預設值,這個值會隨著其他發行項屬性而不同。 「備註」一節的「預設結構描述選項」資料表會顯示以發行項類型和複寫類型為基礎的預設結構描述選項。

    非 SQL Server 發行項的預設值是 0x050D3

    並非所有 schema_option 值對於每個複寫類型和發行項類型都有效。 「備註」一節所提供的有效結構描述選項資料表會顯示您可以根據發行項類型和複寫類型的組合來選擇的有效結構描述選項。

  • [ @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,它可以是一個或多個這些值的 | (Bitwise OR) 結果。

    描述

    1

    發行項在使用中。

    8

    將資料行名稱包括在 INSERT 陳述式中。

    16 (預設值)

    使用參數化的陳述式。

    24

    將資料行名稱包括在 INSERT 陳述式中,且使用參數化陳述式。

    64

    僅供參考之用。不支援。我們無法保證未來的相容性。

    例如,對於使用參數化陳述式的使用中發行項,這個資料行的值是 17。 0 值表示發行項不在使用中,且未定義任何其他屬性。

  • [ @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 設定為 truesp_addarticle 會延遲建立檢視,直到呼叫 sp_articleview 為止 (在加入最後一個 sp_articlecolumn 之後)。

如果發行集允許更新訂閱,且所發行的資料表沒有 uniqueidentifier 資料行,sp_addarticle 會自動將 uniqueidentifier 資料行加入資料表中。

複寫至非 SQL Server 執行個體的訂閱者端 (異質性複寫) 時,只有 Transact-SQL 陳述式支援 INSERT、UPDATE 和 DELETE 命令。

當記錄讀取器代理程式正在執行時,將發行項加入至點對點發行集可能會造成記錄讀取器代理程式和加入發行項的處理序之間發生死結。 為避免這個問題,在將發行項加入至點對點發行集之前,請使用複寫監視器停止您要加入發行項所在節點上的記錄讀取器代理程式。 加入發行項之後重新啟動記錄讀取器代理程式。

設定 @del\_cmd = 'NONE' 或 @ins\_cmd = 'NONE' 時,UPDATE 命令的傳播可能也會因為界限更新發生時未傳送這些命令而受到影響 (界限更新是一種來自發行者的 UPDATE 陳述式,會做為訂閱者上的 DELETE/INSERT 配對複寫)。

預設結構描述選項

下表描述使用者未指定 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

serializable 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

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

serializable proc exec

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

proc schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

func schema only

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

0x010x200x20000x4000000x8000000x20000000x80000000x100000000x200000000x400000000x80000000

indexed view schema only

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

0x010x0100x0200x0400x01000x20000x400000x1000000x2000000x4000000x8000000x20000000x80000000x400000000x80000000

[!附註]

如果是佇列更新發行集,您必須啟用 0x80000x80 這兩個 schema_option 值。 非 SQL Server 發行集的支援 schema_option 為:0x010x020x100x400x800x10000x40000X8000

範例

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

權限

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

請參閱

參考

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)

概念

定義發行項

發行資料和資料庫物件