分享方式:


sp_changearticle (Transact-SQL)

適用於:SQL Server Azure SQL 受控執行個體

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

Transact-SQL 語法慣例

語法

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

引數

[ @publication = ] N'publication'

包含發行項的發行集名稱。 @publication為 sysname,預設值為 NULL

[ @article = ] N'article'

要變更其屬性之發行項的名稱。 @article為 sysname,預設值為 NULL

[ @property = ] N'property'

要變更的發行項屬性。 @property為 nvarchar(100),預設值為 NULL

[ @value = ] N'value'

發行項屬性的新值。 @value為 nvarchar(255),預設值為 NULL

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

屬性 描述
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_optionbinary(8)。 如需詳細資訊,請參閱備註一節。
0x00 停用 快照集代理程式 的腳本。
0x01 產生物件建立(CREATE TABLECREATE PROCEDURE等等)。
0x02 如果已定義,產生傳播發行項變更的預存程式。
0x04 識別數據行是使用 IDENTITY 屬性編寫腳本。
0x08 復寫 時間戳數據 行。 如果未設定, 時間戳 數據行會復寫為 二進位檔。
0x10 產生對應的叢集索引。
0x20 將使用者定義資料類型 (UDT) 轉換為訂閱者端的基底數據類型。 如果 UDT 資料行是主鍵的一CHECKDEFAULT部分,或計算數據行參考 UDT 資料行,則無法使用此選項。 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 (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 將大於 8,000 個字節 的 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資料類型方法參考
0x4000000000 復寫數據表上任何篩選的索引。 如需已篩選索引的詳細資訊,請參閱建立篩選的索引 (機器翻譯)
0x8000000000 geographygeometry 數據類型轉換成 varbinary(max) ,以便將這些類型的數據行復寫至執行 SQL Server 2005 (9.x) 的訂閱者。
0x10000000000 復寫 geographygeometry 類型的數據行索引。
0x20000000000 復寫 SPARSE 數據行的屬性。 如需此屬性的詳細資訊,請參閱 使用疏鬆數據行
0x40000000000 啟用快照集代理程式的腳本,以在訂閱者上建立記憶體優化數據表。
0x80000000000 將叢集索引轉換為記憶體優化發行項的非叢集索引。
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_objectfilter 屬性。 Oracle 發行者不支援。
logbased manualfilter 具有手動篩選的記錄式發行項。 此選項需要您也設定 sync_objectfilter 屬性。 Oracle 發行者不支援。
logbased manualview 具有手動檢視的記錄型發行項。 此選項需要您也設定 sync_object 屬性。 Oracle 發行者不支援。
indexed viewlogbased 以記錄為基礎的索引檢視文章。 Oracle 發行者不支援。 針對這種類型的發行項,基表不需要個別發行。
indexed viewlogbased manualboth 具有手動篩選和手動檢視的記錄型索引檢視文章。 此選項需要您也設定 sync_objectfilter 屬性。 針對這種類型的發行項,基表不需要個別發行。 Oracle 發行者不支援。
indexed viewlogbased manualfilter 具有手動篩選的記錄型索引檢視發行項。 此選項需要您也設定 sync_objectfilter 屬性。 針對這種類型的發行項,基表不需要個別發行。 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 = ] N'publisher'

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

注意

變更 SQL Server 發行者上的發行項屬性時,不應該使用 publisher

傳回碼值

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

備註

sp_changearticle 用於快照式複寫和事務複製。

當發行項屬於支援點對點事務複製的發行集時,您只能變更 descriptionins_cmdupd_cmddel_cmd 屬性。

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

  • del_cmd
  • dest_table
  • destination_owner
  • ins_cmd
  • pre_creation_cmd
  • schema_options
  • upd_cmd

變更下列任何屬性需要重新初始化現有的訂閱,而且您必須為 @force_reinit_subscription 參數指定的值1

  • del_cmd
  • dest_table
  • destination_owner
  • filter
  • ins_cmd
  • status
  • upd_cmd

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

注意

變更的值 schema_option時,系統不會執行位更新。 這表示當您使用 sp_changearticle設定schema_option時,可能會關閉現有的位設定。 若要保留現有的設定,您應該執行 |(位 OR) 在您設定的值與 目前的 值 schema_option之間,可藉由執行 sp_helparticle 來決定。

有效的架構選項

下表描述根據複寫類型(顯示在頂端)和發行項類型 (顯示第一個數據行) 的允許值 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 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
serializable proc exec 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
proc schema only 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
view schema only 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000
func schema only 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000 0x010x200x2000、、0x4000000x8000000x400000000x80000000x20000000x200000000x10000000、 和0x80000000
indexed view schema only 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000 0x010x0100x020、、0x0400x20000x01000x400000x1000000x2000000x20000000x4000000x8000000x8000000、、 和 0x400000000x80000000

注意

針對已排入佇列的更新發行集, schema_option 必須啟用 的值 0x80 。 非 SQL Server 發行集的支援值為:、、、0x020x100x400x1000 0x800x40000x01schema_option

範例

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 [AdventureWorks2022]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

權限

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