sp_changearticle (Transact-SQL)
適用於:SQL ServerAzure 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,預設值為 NULL。
[ @article = ] 'article'
這是要變更其屬性之發行項的名稱。 article 是 sysname,預設值為 NULL。
[ @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 | 不使用命令。 | |
下降 | 卸除目的地數據表。 | |
delete | 刪除目的地數據表。 | |
truncate | 截斷目的地數據表。 | |
pub_identity_range | 控制在訂閱者端指派的指派識別範圍大小。 不支援點對點複寫。 | |
schema_option | 指定指定發行項之架構產生選項的點陣圖。 schema_option為 binary(8)。 如需詳細資訊,請參閱本主題稍後的一節。 | |
0x00 | 停用 快照集代理程式 的腳本。 | |
0x01 | 產生物件建立(CREATE TABLE、CREATE PROCEDURE 等等)。 | |
0x02 | 如果已定義,產生傳播發行項變更的預存程式。 | |
0x04 | 識別數據行是使用 IDENTITY 屬性編寫腳本。 | |
0x08 | 復寫 時間戳數據 行。 如果未設定, 時間戳 數據行會復寫為 二進位檔。 | |
0x10 | 產生對應的叢集索引。 | |
0x20 | 將使用者定義資料類型 (UDT) 轉換為訂閱者端的基底數據類型。 如果 UDT 資料行是主鍵的一部分,或是計算數據行參考 UDT 資料行參考 UDT 資料行,則無法使用此選項。 Oracle 發行者不支援。 | |
0x40 | 產生對應的非叢集索引。 | |
0x80 | 在主鍵上包含宣告的引用完整性。 | |
0x100 | 如果已定義,則復寫數據表發行項上的使用者觸發程式。 | |
0x200 | 復寫 FOREIGN KEY 條件約束。 如果參考的數據表不是發行集的一部分,則不會復寫已發行數據表上的所有FOREIGN KEY條件約束。 | |
0x400 | 復寫 CHECK 條件約束。 | |
0x800 | 複寫預設值。 | |
0x1000 | 復寫數據行層級定序。 | |
0x2000 | 復寫與已發佈發行發行項來源對象相關聯的擴充屬性。 | |
0x4000 | 如果在數據表發行項上定義,則復寫唯一索引鍵。 | |
0x8000 | 使用 ALTER TABLE 語句,將數據表發行項上的主鍵和唯一索引鍵復寫為條件約束。 注意:這個選項已被取代。 請改用 0x80 和 0x4000 。 |
|
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 屬性,請使用此選項來復寫 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 | 複寫數據和索引的壓縮選項。 如需詳細資訊,請參閱 Data Compression。 | |
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 | 將 geography 和 geometry 數據類型轉換成 varbinary(max) ,以便將這些類型的數據行復寫至執行 SQL Server 2005 (9.x) 的訂閱者。 | |
0x10000000000 | 復寫 geography 和 geometry 類型的數據行索引。 | |
0x20000000000 | 復寫數據行的SPARSE屬性。 如需此屬性的詳細資訊,請參閱 使用疏鬆數據行。 | |
0x40000000000 | 啟用快照集代理程式的腳本,以在訂閱者上建立記憶體優化數據表。 | |
0x80000000000 | 將叢集索引轉換為記憶體優化發行項的非叢集索引。 | |
status | 指定屬性的新狀態。 | |
dts 水平分割區 | 僅供參考之用。 不支援。 我們無法保證未來的相容性。 | |
包含資料行名稱 | 數據行名稱會包含在複寫的 INSERT 語句中。 | |
沒有資料行名稱 | 數據行名稱不會包含在複寫的 INSERT 語句中。 | |
沒有 dts 水平分割區 | 發行項的水準分割不是由可轉換的訂閱所定義。 | |
none | 清除 sysarticles 數據表中的所有狀態選項,並將發行項標示為非使用中。 | |
parameters | 變更會使用參數化命令傳播至訂閱者。 這是新發行項的預設設定。 | |
字串 | 變更會使用字串常值傳播至訂閱者。 | |
sync_object | 用來產生同步處理輸出檔的數據表或檢視表名稱。 預設值是 NULL。 Oracle 發行者不支援。 | |
tablespace | 識別記錄數據表針對從 Oracle 資料庫發行之發行項所使用的數據表空間。 如需詳細資訊,請參閱管理 Oracle 資料表空間。 | |
閾 值 | 控制 散發代理程式 指派新識別範圍的百分比值。 不支援點對點複寫。 | |
type | Oracle 發行者不支援。 | |
logbased | 以記錄為基礎的發行項。 | |
logbased manualboth | 具有手動篩選和手動檢視的記錄型發行項。 此選項需要 同時設定sync_object 和 篩選 屬性。 Oracle 發行者不支援。 | |
logbased manualfilter | 具有手動篩選的記錄式發行項。 此選項需要 同時設定sync_object 和 篩選 屬性。 Oracle 發行者不支援。 | |
logbased manualview | 具有手動檢視的記錄型發行項。 此選項需要 同時設定sync_object 屬性。 Oracle 發行者不支援。 | |
已編製索引的 viewlogbased | 以記錄為基礎的索引檢視文章。 Oracle 發行者不支援。 針對這種類型的發行項,基表不需要個別發行。 | |
indexed viewlogbased manualboth | 具有手動篩選和手動檢視的記錄型索引檢視文章。 此選項需要 同時設定sync_object 和 篩選 屬性。 針對這種類型的發行項,基表不需要個別發行。 Oracle 發行者不支援。 | |
indexed viewlogbased manualfilter | 具有手動篩選的記錄型索引檢視發行項。 此選項需要 同時設定sync_object 和 篩選 屬性。 針對這種類型的發行項,基表不需要個別發行。 Oracle 發行者不支援。 | |
索引檢視記錄基底手動檢視 | 具有手動檢視的記錄型索引檢視發行項。 此選項需要 同時設定sync_object 屬性。 針對這種類型的發行項,基表不需要個別發行。 Oracle 發行者不支援。 | |
upd_cmd | 要執行的 UPDATE 語句;否則,它會從記錄檔建構。 | |
NULL | NULL | 傳回可以變更的發行項屬性清單。 |
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
認可此預存程式所採取的動作可能會使現有的快照集失效。 force_invalidate_snapshot是位,預設值為0。
0 指定發行項的變更不會造成快照集無效。 如果預存程式偵測到變更確實需要新的快照集,就會發生錯誤,而且不會進行任何變更。
1 指定發行項的變更可能會導致快照集無效,而且如果有現有的訂用帳戶需要新的快照集,則授與現有快照集被標示為過時和產生的新快照集的許可權。
如需變更時需要產生新快照集的屬性,請參閱一節。
[ @force_reinit_subscription = ]force_reinit_subscription_
確認此預存程式所採取的動作可能需要重新初始化現有的訂用帳戶。 force_reinit_subscription是預設值為 0 的位。
0 指定發行項的變更不會使訂閱重新初始化。 如果預存程式偵測到變更需要重新初始化現有的訂用帳戶,就會發生錯誤,而且不會進行任何變更。
1 指定發行項的變更會導致現有的訂閱重新初始化,並授與重新初始化訂閱的許可權。
如需變更時需要重新初始化所有現有訂閱的屬性,請參閱一節。
[ @publisher = ] 'publisher'
指定非 SQL Server 發行者。 publisher 是 sysname,預設值為 NULL。
注意
變更 SQL Server 發行者上的發行項屬性時,不應該使用 publisher 。
傳回碼值
0 (成功) 或 1 (失敗)
備註
sp_changearticle用於快照式複寫和事務複製。
當發行項屬於支援點對點事務複製的發行集時,您只能變更 描述、 ins_cmd、 upd_cmd和 del_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 |
索引檢視記錄基底 | 所有選項 | 所有選項,但 0x02 |
索引檢視記錄式手動篩選 | 所有選項 | 所有選項,但 0x02 |
索引檢視記錄式手動檢視 | 所有選項 | 所有選項,但 0x02 |
索引檢視記錄基底手動索引 | 所有選項 | 所有選項,但 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 |
serializable 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 架構 | 0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000和0x80000000 | 0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000和0x80000000 |
僅限檢視架構 | 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 架構 | 0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000和0x80000000 | 0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000和0x80000000 |
僅限索引檢視架構 | 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 |
注意
針對已排入佇列的更新發行集,必須啟用0x80的schema_option值。 非 SQL Server 發行集支援的schema_option值為:0x01、0x02、0x10、0x40、0x80、0x1000和0x4000。
範例
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。
另請參閱
檢視和修改發行項屬性
變更發行集與發行項屬性
sp_addarticle (Transact-SQL)
sp_articlecolumn (Transact-SQL)
sp_droparticle (Transact-SQL)
sp_helparticle (Transact-SQL)
sp_helparticlecolumns (Transact-SQL)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應