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
.
下表说明项目的属性和这些属性的值。
properties | 值 | 说明 |
---|---|---|
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) 转换为基本数据类型。 如果 CHECK DEFAULT 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 该属性。 如果要将表复制到 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 字节的公共语言运行时(CLR)用户定义类型(UDT)转换为 varbinary(max), 以便可以将 UDT 类型的列复制到运行 SQL Server 2005 (9.x) 的订阅服务器。 | |
0x2000000000 |
将 hierarchyid 数据类型转换为 varbinary(max), 以便可以将类型 hierarchyid 的列复制到运行 SQL Server 2005 (9.x) 的订阅服务器。 有关如何在复制表中使用 hierarchyid 列的详细信息,请参阅 hierarchyid 数据类型方法参考。 | |
0x4000000000 |
复制表的任何筛选的索引。 有关筛选索引的详细信息,请参阅创建筛选索引。 | |
0x8000000000 |
将 地理 和 几何 数据类型转换为 varbinary(max), 以便可以将这些类型的列复制到运行 SQL Server 2005 (9.x) 的订阅服务器。 | |
0x10000000000 |
复制地理和几何图形列的索引。 | |
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为位,默认值为 0
.
0
指定对项目所做的更改不会导致快照无效。 如果该存储过程检测到更改确实需要新的快照,则会发生错误,并且不进行任何更改。
1
指定对项目所做的更改可能会导致快照无效,如果存在需要新快照的现有订阅,则授予现有快照标记为已过时和生成的新快照的权限。
[ @force_reinit_subscription = ] force_reinit_subscription
确认此存储过程所执行的操作是否需要重新初始化现有订阅。 @force_reinit_subscription为位,默认值为 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
时,系统不会执行按位更新。 这意味着,使用schema_option
sp_changearticle
时,可能会关闭现有位设置。 若要保留现有设置,应执行 |(按位或) 设置的值和当前值 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 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
serializable proc exec |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
proc schema only |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
view schema only |
0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
func schema only |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
0x01 、、0x20 、0x400000 0x2000 、0x800000 、0x2000000 、0x8000000 、、0x10000000 、0x20000000 、 0x40000000 和0x80000000 |
indexed view schema only |
0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
0x01 、0x010 、、0x040 0x020 、、 0x2000 0x0100 0x40000000 0x8000000 0x800000 0x200000 0x2000000 0x40000 0x100000 0x400000 和0x80000000 |
注意
对于排队更新发布, schema_option
必须启用该值 0x80
。 非 SQL Server 发布的受schema_option
支持值为:0x01
、、、0x10
0x02
、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
权限
只有 sysadmin 固定服务器角色的成员或db_owner固定数据库角色的成员才能执行sp_changearticle
。