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'
将更改其属性的项目的名称。 article 的数据类型为 sysname,默认值为 NULL。[ @property=] 'property'
要更改的项目属性。 property 的数据类型为 nvarchar(100)。[ @value=] 'value'
项目属性的新值。 value 的数据类型为 nvarchar(255)。下表说明项目的属性和这些属性的值。
属性
值
说明
creation_script
用于创建目标表的项目架构脚本的路径和名称。 默认值为 NULL。
del_cmd
要执行的 DELETE 语句,否则从日志构造。
description
项目的新说明项。
dest_object
提供该列是为了向后兼容。 使用 dest_table。
dest_table
新目标表。
destination_owner
目标对象所有者的名称。
筛选
要用于筛选表(水平筛选)的新存储过程。 默认值为 NULL。 对于对等复制中的发布,此值不能更改。
fire_triggers_on_snapshot
True
应用初始快照时会执行已复制的用户触发器。
注意 对于要复制的触发器,schema_option 的位掩码值必须包括值 0x100。
False
应用初始快照时不会执行已复制的用户触发器。
identity_range
控制在订阅服务器中分配的标识范围的大小。 对等复制不支持此属性。
ins_cmd
要执行的 INSERT 语句,否则从日志构造。
pre_creation_cmd
可以在应用同步之前除去、删除或截断目标表的预创建命令。
无
不使用命令。
drop
删除目标表。
delete
删除目标表。
truncate
截断目标表。
pub_identity_range
控制在订阅服务器中分配的标识范围的大小。 对等复制不支持此属性。
schema_option
为给定项目指定架构生成选项的位图。 schema_option 的数据类型为 binary(8)。 有关详细信息,请参阅本主题后面的“备注”部分。
0x00
通过快照代理禁用脚本。
0x01
生成对象创建(CREATE TABLE、CREATE PROCEDURE 等)。
0x02
如果已定义,则生成传播项目更改的存储过程。
0x04
使用 IDENTITY 属性为标识列编写脚本。
0x08
复制 timestamp 列。 如果不设置,则 timestamp 列将作为 binary 进行复制。
0x10
生成对应的聚集索引。
0x20
在订阅服务器中将用户定义数据类型 (UDT) 转换为基本数据类型。 如果 UDT 列是主键的一部分或者计算列引用 UDT 列,则当 UDT 列上具有 CHECK 或 DEFAULT 约束时,此选项无法使用。 Oracle 发布服务器不支持。
0x40
生成相应的非聚集索引。
0x80
包含已对主键声明的引用完整性。
0x100
如果已定义,则复制表项目的用户触发器。
0x200
复制 FOREIGN KEY 约束。 如果被引用的表不是发布的一部分,则不会复制已发布表的任何 FOREIGN KEY 约束。
0x400
复制检查约束。
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
不复制绑定到 xml 列的 XML 架构集合。
0x4000000
复制 xml 列的索引。
0x8000000
创建订阅服务器中尚不存在的任何架构。
0x10000000
在订阅服务器上将 xml 列转换成 ntext。
0x20000000
将在 SQL Server 2005 中引入的大型对象数据类型(nvarchar(max)、varchar(max) 和 varbinary(max))转换为 SQL Server 2000 支持的数据类型。
0x40000000
复制权限。
0x80000000
尝试删除不属于发布一部分的任何对象的依赖项。
0x100000000
如果对 varbinary(max) 列指定了 FILESTREAM 属性,则使用此选项可复制此属性。 如果要将表复制到 SQL Server 2005 订阅服务器,请勿指定此选项。 不论此架构选项的设置如何,均不支持将包含 FILESTREAM 列的表复制到 SQL Server 2000 订阅服务器。
请参阅相关选项 0x800000000。
0x200000000
将在 SQL Server 2008 中引入的日期和时间数据类型(date、time、datetimeoffset 和 datetime2)转换为 SQL Server 早期版本支持的数据类型。
0x400000000
复制数据和索引的压缩选项。 有关详细信息,请参阅数据压缩。
0x800000000
设置此选项可将 FILESTREAM 数据存储到订阅服务器上其自身的文件组中。 如果不设置此选项,FILESTREAM 数据将存储在默认文件组中。 由于复制操作不创建文件组,因此如果您设置此选项,您必须先创建文件组,然后在订阅服务器上应用快照。 有关如何在应用快照前创建对象的详细信息,请参阅在应用快照之前和之后执行脚本。
请参阅相关选项 0x100000000。
0x1000000000
将公共语言运行时 (CLR) 中大于 8000 字节的用户定义类型 (UDT) 转换为 varbinary(max),以使类型为 UDT 的列能够复制到运行 SQL Server 2005 的订阅服务器。
0x2000000000
将 hierarchyid 数据类型转换为 varbinary(max),以使类型为 hierarchyid 的列能够复制到运行 SQL Server 2005 的订阅服务器。 有关如何在复制的表中使用 hierarchyid 列的详细信息,请参阅 hierarchyid (Transact-SQL)。
0x4000000000
复制表的任何筛选的索引。 有关筛选的索引的详细信息,请参阅创建筛选索引。
0x8000000000
将 geography 和 geometry 数据类型转换为 varbinary(max),以使这些类型的列能够复制到运行 SQL Server 2005 的订阅服务器。
0x10000000000
复制类型为 geography 和 geometry 的列的索引。
0x20000000000
复制列的 SPARSE 属性。 有关该属性的详细信息,请参阅使用稀疏列。
status
指定属性的新状态。
dts horizontal partitions
标识为仅供参考。不提供支持。不保证以后的兼容性。
include column names
复制的 INSERT 语句中包括列名。
no column names
复制的 INSERT 语句中不包括列名。
no dts horizontal partitions
项目的水平分区不由可转换的订阅定义。
无
清除 sysarticles 表中的所有状态选项并将项目标记为不活动。
参数
使用参数化命令将更改传播给订阅服务器。 这是新项目的默认设置。
string literals
使用字符串文字值将更改传播给订阅服务器。
sync_object
用于生成同步输出文件的表或视图的名称。 默认值为 NULL。 Oracle 发布服务器不支持。
tablespace
标识从 Oracle 数据库发布的项目的日志记录表所使用的表空间。 有关详细信息,请参阅管理 Oracle 表空间。
threshold
用于控制分发代理何时分配新标识范围的百分比值。 对等复制不支持此属性。
类型
Oracle 发布服务器不支持。
logbased
基于日志的项目。
logbased manualboth
具有手动筛选器和手动视图并且基于日志的项目。 此选项也需要设置 sync_object 和 filter 属性。 Oracle 发布服务器不支持。
logbased manualfilter
具有手动筛选器并且基于日志的项目。 此选项也需要设置 sync_object 和 filter 属性。 Oracle 发布服务器不支持。
logbased manualview
具有手动视图并且基于日志的项目。 此选项也需要设置 sync_object 属性。 Oracle 发布服务器不支持。
indexed view logbased
基于日志的索引视图项目。 Oracle 发布服务器不支持。 对于此类型的项目,不需要单独发布基表。
indexed view logbased manualboth
具有手动筛选器和手动视图并且基于日志的索引视图项目。 此选项也需要设置 sync_object 和 filter 属性。 对于此类型的项目,不需要单独发布基表。 Oracle 发布服务器不支持。
indexed view logbased manualfilter
具有手动筛选器并且基于日志的索引视图项目。 此选项也需要设置 sync_object 和 filter 属性。 对于此类型的项目,不需要单独发布基表。 Oracle 发布服务器不支持。
indexed view logbased 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= ] '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 时,可能会关闭现有的位设置。 若要保留现有的设置,则应在正在设置的值和 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、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 schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
view schema only |
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 schema only |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
0x01、0x20、0x2000、0x400000、0x800000、0x2000000、0x8000000、0x10000000、0x20000000、0x40000000 和 0x80000000 |
indexed view schema only |
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 |
注意 |
---|
对于排队的更新发布,必须启用 schema_option 的值 0x80。 非 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 [AdventureWorks2012]
EXEC sp_changearticle
@publication = @publication,
@article = @article,
@property = N'schema_option',
@value = @option,
@force_invalidate_snapshot = 1;
GO
权限
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_changearticle。
请参阅
参考
sp_articlecolumn (Transact-SQL)
sp_helparticlecolumns (Transact-SQL)