sp_changearticle (Transact-SQL)
適用於:SQL Server Azure 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_option 是 binary(8)。 如需詳細資訊,請參閱備註一節。 |
|
0x00 |
停用 快照集代理程式 的腳本。 | |
0x01 |
產生物件建立(CREATE TABLE 、 CREATE PROCEDURE 等等)。 |
|
0x02 |
如果已定義,產生傳播發行項變更的預存程式。 | |
0x04 |
識別數據行是使用 IDENTITY 屬性編寫腳本。 |
|
0x08 |
復寫 時間戳數據 行。 如果未設定, 時間戳 數據行會復寫為 二進位檔。 | |
0x10 |
產生對應的叢集索引。 | |
0x20 |
將使用者定義資料類型 (UDT) 轉換為訂閱者端的基底數據類型。 如果 UDT 資料行是主鍵的一CHECK DEFAULT 部分,或計算數據行參考 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 寫屬性。 如果您要將數據表復寫至 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 |
將 geography 和 geometry 數據類型轉換成 varbinary(max) ,以便將這些類型的數據行復寫至執行 SQL Server 2005 (9.x) 的訂閱者。 | |
0x10000000000 |
復寫 geography 和 geometry 類型的數據行索引。 | |
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_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 = ] N'publisher'
指定非 SQL Server 發行者。 @publisher為 sysname,預設值為 NULL
。
注意
變更 SQL Server 發行者上的發行項屬性時,不應該使用 publisher 。
傳回碼值
0
(成功) 或 1
(失敗)。
備註
sp_changearticle
用於快照式複寫和事務複製。
當發行項屬於支援點對點事務複製的發行集時,您只能變更 description
、 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 |
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 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
0x01 、0x20 、0x2000 、、0x400000 、0x800000 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
serializable proc exec |
0x01 、0x20 、0x2000 、、0x400000 、0x800000 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
0x01 、0x20 、0x2000 、、0x400000 、0x800000 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
proc schema only |
0x01 、0x20 、0x2000 、、0x400000 、0x800000 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
0x01 、0x20 、0x2000 、、0x400000 、0x800000 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
view schema only |
0x01 、0x010 、0x020 、、0x040 、0x2000 0x0100 0x40000 0x100000 0x200000 0x2000000 0x400000 0x800000 、0x8000000 、、 和 0x40000000 0x80000000 |
0x01 、0x010 、0x020 、、0x040 、0x2000 0x0100 0x40000 0x100000 0x200000 0x2000000 0x400000 0x800000 、0x8000000 、、 和 0x40000000 0x80000000 |
func schema only |
0x01 、0x20 、0x2000 、、0x400000 、0x800000 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
0x01 、0x20 、0x2000 、、0x400000 、0x800000 、0x40000000 0x8000000 0x2000000 0x20000000 0x10000000 、 和0x80000000 |
indexed view schema only |
0x01 、0x010 、0x020 、、0x040 、0x2000 0x0100 0x40000 0x100000 0x200000 0x2000000 0x400000 0x800000 、0x8000000 、、 和 0x40000000 0x80000000 |
0x01 、0x010 、0x020 、、0x040 、0x2000 0x0100 0x40000 0x100000 0x200000 0x2000000 0x400000 0x800000 、0x8000000 、、 和 0x40000000 0x80000000 |
注意
針對已排入佇列的更新發行集, schema_option
必須啟用 的值 0x80
。 非 SQL Server 發行集的支援值為:、、、0x02
、0x10
0x40
、 0x1000
0x80
和 0x4000
。 0x01
schema_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
。