sp_changearticle (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,默认值为 NULL。
[ @article = ] 'article'
要更改其属性的项目的名称。 项目 为 sysname,默认值为 NULL。
[ @property = ] 'property'
要更改的项目属性。 属性为 nvarchar(100)。
[ @value = ] 'value'
项目属性的新值。 值为 nvarchar(255)。
下表说明项目的属性和这些属性的值。
properties | 值 | 说明 |
---|---|---|
creation_script | 用于创建目标表的项目架构脚本的路径和名称。 默认值为 NULL。 | |
del_cmd | 要执行的 DELETE 语句,否则从日志构造。 | |
说明 | 项目的新说明项。 | |
dest_object | 提供该列是为了向后兼容。 使用 dest_table。 | |
dest_table | 新目标表。 | |
destination_owner | 目标对象所有者的名称。 | |
filter | 要用于筛选表(水平筛选)的新存储过程。 默认值为 NULL。 对于对等复制中的发布,此值不能更改。 | |
fire_triggers_on_快照 | true | 应用初始快照时会执行已复制的用户触发器。 注意:若要副本 (replica)触发器,schema_option的位掩码值必须包含值0x100。 |
false | 应用初始快照时不会执行已复制的用户触发器。 | |
identity_range | 控制在订阅服务器中分配的标识范围的大小。 对等复制不支持此属性。 | |
ins_cmd | 要执行的 INSERT 语句,否则从日志构造。 | |
pre_creation_cmd | 可以在应用同步之前除去、删除或截断目标表的预创建命令。 | |
无 | 不使用命令。 | |
删除 | 删除目标表。 | |
delete | 删除目标表。 | |
truncate | 截断目标表。 | |
pub_identity_range | 控制在订阅服务器中分配的标识范围的大小。 对等复制不支持此属性。 | |
schema_option | 为给定项目指定架构生成选项的位图。 schema_option为 binary(8)。 有关详细信息,请参阅本主题后面的“备注”部分。 | |
0x00 | 通过快照代理禁用脚本。 | |
0x01 | 生成对象创建(CREATE TABLE、CREATE PROCEDURE 等)。 | |
0x02 | 如果已定义,则生成传播项目更改的存储过程。 | |
0x04 | 使用 IDENTITY 属性为标识列编写脚本。 | |
0x08 | 复制 时间戳 列。 如果未设置,时间戳列副本 (replica)为二进制。 | |
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 语句将表项目上的主键和唯一键作为约束复制。 注意:此选项已弃用。 请改用 0x80 和 0x4000 。 |
|
0x10000 | 以 NOT FOR REPLICATION 方式复制 CHECK 约束,以便在同步期间不强制执行约束。 | |
0x20000 | 以 NOT FOR REPLICATION 方式复制 FOREIGN KEY 约束,以便在同步期间不强制执行约束。 | |
0x40000 | 复制与已分区表或已分区索引相关联的文件组。 | |
0x80000 | 复制已分区表的分区方案。 | |
0x100000 | 复制已分区索引的分区方案。 | |
0x200000 | 复制表统计信息。 | |
0x400000 | 默认绑定 | |
0x800000 | 规则绑定 | |
0x1000000 | 全文索引 | |
0x2000000 | 不会副本 (replica)绑定到 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 属性,请使用此选项副本 (replica)它。 如果要将表副本 (replica)到 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 字节的公共语言运行时(CLR)用户定义类型(UDT)转换为 varbinary(max),以便可以将 UDT 类型的列副本 (replica)到运行 SQL Server 2005 (9.x) 的订阅服务器。 | |
0x2000000000 | 将 hierarchyid 数据类型转换为 varbinary(max),以便可以将类型 hierarchyid 的列副本 (replica)到运行 SQL Server 2005 (9.x) 的订阅服务器。 有关如何在副本 (replica)表中使用 hierarchyid 列的详细信息,请参阅 hierarchyid (Transact-SQL)。 | |
0x4000000000 | 复制表的任何筛选的索引。 有关筛选索引的详细信息,请参阅 “创建筛选索引”。 | |
0x8000000000 | 将地理和几何数据类型转换为 varbinary(max),以便可以将这些类型的列副本 (replica)到运行 SQL Server 2005 (9.x) 的订阅服务器。 | |
0x10000000000 | 复制地理和几何图形列的索引。 | |
0x20000000000 | 复制列的 SPARSE 属性。 有关此属性的详细信息,请参阅 “使用稀疏列”。 | |
0x40000000000 | 启用快照代理的脚本,以在订阅服务器上创建内存优化表。 | |
0x80000000000 | 将聚集索引转换为内存优化项目的非聚集索引。 | |
status | 指定属性的新状态。 | |
dts 水平分区 | 标识为仅供参考。 不支持。 不保证以后的兼容性。 | |
include 列名称 | 复制的 INSERT 语句中包括列名。 | |
无列名称 | 复制的 INSERT 语句中不包括列名。 | |
无 dts 水平分区 | 项目的水平分区不由可转换的订阅定义。 | |
无 | 清除 sysarticles 表中的所有状态选项,并将项目标记为非活动状态。 | |
参数 | 使用参数化命令将更改传播给订阅服务器。 这是新项目的默认设置。 | |
字符串 | 使用字符串文字值将更改传播给订阅服务器。 | |
sync_object | 用于生成同步输出文件的表或视图的名称。 默认值为 NULL。 Oracle 发布服务器不支持。 | |
tablespace | 标识从 Oracle 数据库发布的项目的日志记录表所使用的表空间。 有关详细信息,请参阅管理 Oracle 表空间。 | |
threshold | 用于控制分发代理何时分配新标识范围的百分比值。 对等复制不支持此属性。 | |
type | Oracle 发布服务器不支持。 | |
logbased | 基于日志的项目。 | |
logbased manualboth | 具有手动筛选器和手动视图并且基于日志的项目。 此选项要求 同时设置sync_object 和 筛选器 属性。 Oracle 发布服务器不支持。 | |
logbased manualfilter | 具有手动筛选器并且基于日志的项目。 此选项要求 同时设置sync_object 和 筛选器 属性。 Oracle 发布服务器不支持。 | |
logbased manualview | 具有手动视图并且基于日志的项目。 此选项要求 同时设置sync_object 属性。 Oracle 发布服务器不支持。 | |
indexed viewlogbased | 基于日志的索引视图项目。 Oracle 发布服务器不支持。 对于此类型的项目,不需要单独发布基表。 | |
已编制索引的 viewlogbased manualboth | 具有手动筛选器和手动视图并且基于日志的索引视图项目。 此选项要求 同时设置sync_object 和 筛选器 属性。 对于此类型的项目,不需要单独发布基表。 Oracle 发布服务器不支持。 | |
indexed viewlogbased manualfilter | 具有手动筛选器并且基于日志的索引视图项目。 此选项需要 同时设置sync_object 和 筛选器 属性。 对于此类型的项目,不需要单独发布基表。 Oracle 发布服务器不支持。 | |
已编制索引的 viewlogbased manualview | 具有手动视图并且基于日志的索引视图项目。 此选项要求 同时设置sync_object 属性。 对于此类型的项目,不需要单独发布基表。 Oracle 发布服务器不支持。 | |
upd_cmd | 要执行的 UPDATE 语句,否则从日志构造。 | |
NULL | Null | 返回可更改的项目属性列表。 |
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
确认此存储过程执行的操作可能会使现有快照失效。 force_invalidate_快照有点,默认值为 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用于快照 副本 (replica)和事务副本 (replica)。
当项目属于支持对等事务性副本 (replica)的发布时,只能更改说明、ins_cmd、upd_cmd和del_cmd属性。
更改以下任何属性都需要生成新的快照,并且必须为 force_invalidate_快照 参数指定值 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时,可能会关闭现有位设置。 若要保留现有设置,应执行 |(按位或)设置的值与schema_option的当前值之间,可以通过执行sp_helparticle来确定该值。
有效架构选项
下表根据副本 (replica)类型(显示在顶部)和项目类型(显示第一列)描述schema_option的允许值。
文章类型 | 复制类型 - 事务性 | 复制类型 - 快照 |
---|---|---|
logbased | 以上所有选项 | 所有选项,但 0x02 |
logbased manualfilter | 以上所有选项 | 所有选项,但 0x02 |
logbased manualview | 以上所有选项 | 所有选项,但 0x02 |
已编制索引的视图日志 | 以上所有选项 | 所有选项,但 0x02 |
索引视图 logbased manualfilter | 以上所有选项 | 所有选项,但 0x02 |
索引视图 logbased manualview | 以上所有选项 | 所有选项,但 0x02 |
索引视图 logbase manualboth | 以上所有选项 | 所有选项,但 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
权限
只有 sysadmin 固定服务器角色的成员或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 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈