sp_changearticle (Transact-SQL)

變更交易式或快照式發行集中之發行項的屬性。這個預存程序執行於發行集資料庫的發行者端。

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

語法

sp_changearticle [ [@publication= ] 'publication' ]
    [ , [ @article= ] 'article' ]
    [ , [ @property= ] 'property' ]
    [ , [ @value= ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]

引數

  • [ @publication = ] 'publication'
    這是包含發行項之發行集的名稱。publication 是 sysname,沒有預設值。

  • [ @article = ] 'article'
    這是要變更其屬性的發行項名稱。article 是 sysname,沒有預設值。

  • [ @property=] 'property'
    這是要變更的發行項屬性。property 是 nvarchar(100)。

  • [ @value=] 'value'
    這是發行項屬性的新值。value 是 nvarchar(255)。

    下表描述發行項的屬性及這些屬性的值。

    屬性

    描述

    creation_script

     

    用於建立目標資料表之發行項結構描述指令碼的路徑和名稱。預設值是 NULL。

    del_cmd

     

    要執行的 DELETE 陳述式;否則,便從記錄檔中建構它。

    description

     

    發行項的新描述項目。

    dest_object

     

    提供這個項目的目的,是為了與舊版相容。請使用 dest_table

    dest_table

     

    新的目的地資料表。

    destination_owner

     

    目的地物件的擁有者名稱。

    filter

     

    用於篩選資料表 (水平篩選) 的新預存程序。預設值是 NULL。點對點複寫發行集的這個項目不能變更。

    fire_triggers_on_snapshot

    true

    在套用初始快照集時,執行複寫的使用者觸發程序。

    附註附註
    為了複寫觸發程序,schema_option 的位元遮罩值必須包括 0x100 值。

     

    false

    在套用初始快照集時,不執行複寫的使用者觸發程序。

    identity_range

     

    控制在訂閱者端指派的指派識別範圍大小。不支援點對點複寫使用這個項目。

    ins_cmd

     

    要執行的 INSERT 陳述式;否則,便從記錄檔中建構它。

    pre_creation_cmd

    可以在套用同步處理之前,卸除、刪除或截斷目的地資料表的預先建立命令。

     

    none

    不使用命令。

     

    drop

    卸除目的地資料表。

     

    delete

    刪除目的地資料表。

     

    truncate

    截斷目的地資料表。

    pub_identity_range

     

    控制在訂閱者端指派的指派識別範圍大小。不支援點對點複寫使用這個項目。

    schema_option

    指定給定發行項之結構描述產生選項的點陣圖。schema_option 是 binary(8)。如需詳細資訊,請參閱本主題稍後的「備註」一節。

     

    0x00

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

     

    0x01

    產生物件的建立作業 (CREATE TABLE、CREATE PROCEDURE 等)。

     

    0x02

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

     

    0x04

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

     

    0x08

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

     

    0x10

    產生對應的叢集索引。

     

    0x20

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

     

    0x40

    產生對應的非叢集索引。

     

    0x80

    包括主索引鍵的宣告式參考完整性。

     

    0x100

    複寫資料表發行項的使用者觸發程序 (如果定義的話)。

     

    0x200

    複寫 FOREIGN KEY 條件約束。如果參考的資料表不是發行集的一部分,便不會複寫發行資料表上任何的 FOREIGN KEY 條件約束。

     

    0x400

    複寫 CHECK 條件約束。

     

    0x800

    複寫預設值。

     

    0x1000

    複寫資料行層級定序。

     

    0x2000

    複寫與已發行之發行項來源物件相關聯的擴充屬性。

     

    0x4000

    如果資料表發行項上定義了唯一索引鍵,便複寫唯一索引鍵。

     

    0x8000

    複寫資料表發行項的主索引鍵和唯一索引鍵,來做為使用 ALTER TABLE 陳述式的條件約束。

    附註附註
    這個選項已被取代。請改用 0x800x4000

     

    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 所支援的資料類型。如需有關這些類型對應方式的詳細資訊,請參閱<在複寫拓撲中使用多個 SQL Server 版本>中的「針對舊版本對應新資料類型」一節。

     

    0x40000000

    複寫權限。

     

    0x80000000

    嘗試卸除對於不在發行集中之任何物件的相依性。

    0x100000000

    使用這個選項即可複寫 FILESTREAM 屬性 (如果它指定於 varbinary(max) 資料行上的話)。如果您要將資料表複寫至 SQL Server 2005 訂閱者,請勿指定這個選項。目前不支援將含有 FILESTREAM 資料行的資料表複寫至 SQL Server 2000 訂閱者,不論這個結構描述選項的設定方式為何都一樣。

    請參閱相關的選項 0x800000000

    0x200000000

    將 SQL Server 2008 中所導入的日期和時間資料類型 (date、time、datetimeoffset 和 datetime2) 轉換成舊版 SQL Server 所支援的資料類型。如需有關這些類型對應方式的詳細資訊,請參閱<在複寫拓撲中使用多個 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 屬性。如需有關這個屬性的詳細資訊,請參閱<使用疏鬆資料行>。

    status

    指定屬性的新狀態。

     

    dts horizontal partitions

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

     

    include column names

    資料行名稱包括在複寫的 INSERT 陳述式中。

     

    no column names

    資料行名稱不包括在複寫的 INSERT 陳述式中。

     

    no dts horizontal partitions

    發行項的水平資料分割並非由可轉換的訂閱來定義。

     

    none

    清除 sysarticles 資料表中的所有狀態選項,將發行項標示為非使用中。

     

    parameters

    利用參數化的命令,將變更傳播到訂閱者。這是新發行項的預設值。

     

    string literals

    利用字串常值,將變更傳播到訂閱者。

    sync_object

     

    用於產生同步處理輸出檔之資料表或檢視的名稱。預設值是 NULL。不支援 Oracle 發行者使用這個值。

    tablespace

    識別 Oracle 資料庫發行的發行項之記錄資料表所用的資料表空間。如需詳細資訊,請參閱<管理 Oracle 資料表空間>。

    threshold

     

    用於控制散發代理程式指派新識別範圍之時機的百分比值。不支援點對點複寫使用這個項目。

    type

     

    不支援 Oracle 發行者使用這個值。

     

    logbased

    記錄式發行項。

     

    logbased manualboth

    記錄式且含有手動篩選準則和手動檢視的發行項。此選項需要同時設定 sync_object 和 filter 屬性。不支援 Oracle 發行者使用這個值。

     

    logbased manualfilter

    記錄式且含有手動篩選準則的發行項。此選項需要同時設定 sync_object 和 filter 屬性。不支援 Oracle 發行者使用這個值。

     

    logbased manualview

    含有手動檢視的記錄式發行項。此選項需要同時設定 sync_object 屬性。不支援 Oracle 發行者使用這個值。

     

    indexed viewlogbased

    記錄式索引檢視發行項。不支援 Oracle 發行者使用這個值。這種類型的發行項不需要個別發行基底資料表。

     

    indexed viewlogbased manualboth

    記錄式且含有手動篩選和手動檢視的索引檢視發行項。此選項需要同時設定 sync_object 和 filter 屬性。這種類型的發行項不需要個別發行基底資料表。不支援 Oracle 發行者使用這個值。

     

    indexed viewlogbased manualfilter

    記錄式且含有手動篩選準則的索引檢視發行項。此選項需要同時設定 sync_object 和 filter 屬性。這種類型的發行項不需要個別發行基底資料表。不支援 Oracle 發行者使用這個值。

     

    indexed viewlogbased manualview

    含有手動檢視的記錄式索引檢視發行項。此選項需要同時設定 sync_object 屬性。這種類型的發行項不需要個別發行基底資料表。不支援 Oracle 發行者使用這個值。

    upd_cmd

     

    要執行的 UPDATE 陳述式;否則,便從記錄檔中建構它。

    NULL

    NULL

    傳回可變更的發行項屬性清單。

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    認可這個預存程序所採取的動作可能使現有的快照集失效。force_invalidate_snapshot 是 bit,預設值是 0

    0 指定發行項的變更不會使快照集失效。如果預存程序偵測到變更需要新的快照集,就會發生錯誤,且不會進行任何變更。

    1 指定發行項的變更可能使快照集失效,如果有現有的訂閱需要新的快照集,便提供要標示為已棄用之現有快照集的權限,此時會產生新的快照集。

    請參閱「備註」一節,以了解在變更時需要產生新快照集的屬性。

  • [ **@force_reinit_subscription=]**force_reinit_subscription
    認可這個預存程序所採取的動作可能需要重新初始化現有的訂閱。force_reinit_subscription 是 bit,預設值是 0

    0 指定發行項的變更不會使訂閱重新初始化。如果預存程序偵測到變更需要重新初始化現有的訂閱,就會發生錯誤,且不會進行任何變更。

    1 指定發行項的變更會使現有的訂閱重新初始化,且會提供將發生之訂閱重新初始化的權限。

    請參閱「備註」一節,以了解在變更時需要重新初始化所有現有的訂閱之屬性。

  • [ @publisher= ] 'publisher'
    指定非 SQL Server 發行者。publisher 是 sysname,預設值是 NULL。

    [!附註]

    當在 SQL Server 發行者上變更發行項屬性時,不應使用 publisher。

傳回碼值

0 (成功) 或 1 (失敗)

備註

sp_changearticle 用於快照式複寫和交易式複寫中。

當發行項屬於支援點對點交易式複寫的發行集時,您只能變更 descriptionins_cmdupd_cmddel_cmd 屬性。

變更下列任何屬性都需要產生新的快照集,而且您必須指定值 1 給 force_invalidate_snapshot 參數:

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options

  • upd_cmd

變更下列中的任何屬性都需要重新初始化現有的訂閱,但您必須指定 1 值給 force_reinit_subscription 參數。

  • del_cmd

  • dest_table

  • destination_owner

  • filter

  • ins_cmd

  • status

  • upd_cmd

在現有的發行集內,您可以利用 sp_changearticle 來變更發行項,並不需要卸除再重新建立整個發行集。

[!附註]

當變更 schema_option 的值時,系統不會執行位元更新。這表示當您利用 sp_changearticle 來設定 schema_option 時,可能會關閉現有的位元設定。若要保留現有的設定,應該在您設定的值和 schema_option 目前的值 (可以執行 sp_helparticle 來判斷它的值) 之間執行 & (位元 AND)

有效結構描述選項

下表描述以複寫類型 (顯示在頂端) 和發行項類型 (顯示在第一個資料行之下) 為基礎,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

[!附註]

如果是佇列更新發行集,必須啟用 0x80 的 schema_option 值。支援的非 SQL Server 發行集 schema_option 值如下:0x010x020x100x400x800x10000x4000

範例

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2008R2]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

權限

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