更改事务或快照发布中的项目属性。此存储过程在发布服务器的发布数据库上执行。
sp_changearticle [ [@publication = ] 'publication' ]
[ , [ @article = ] 'article' ]
[ , [ @property = ] 'property' ]
[ , [ @value = ] 'value' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[@publication =] 'publication'
是包含该项目的发布名。publication 的数据类型为 sysname,默认设置为 NULL。
[@article =] 'article'
是要更改其属性的项目名。article 的数据类型为 sysname,默认设置为 NULL。
[@property =] 'property'
是要更改的项目属性。property 的数据类型为 nvarchar(20)。
[@value =] 'value'
是项目属性的新值。value 的数据类型为 nvarchar(255)。
下表描述项目的属性和这些属性的值。
属性 | 值 | 描述 |
---|---|---|
description | 发布作业的新描述项。 | |
sync_object | 用于生成同步输出文件的表或视图的名称。默认设置为 NULL。 | |
type | logbased(默认值)= 基于日志的项目。 Logbased manualfilter = 带手工筛选的基于日志的项目。 Logbased manualview = 带手工视图的基于日志的项目。 Logbased manualboth = 带手工筛选和手工视图的基于日志的项目。 |
项目类型。 |
ins_cmd | 要执行的 INSERT 语句,否则从日志构造。 | |
del_cmd | 要执行的 DELETE 语句,否则从日志构造。 | |
upd_cmd | 要执行的 UPDATE 语句,否则从日志构造。 | |
filter | 要用于筛选表(水平筛选)的新存储过程。默认设置为 NULL。 | |
dest_table | 新目的表。 | |
dest_object | 为向后兼容性而提供。使用 dest_table。 | |
creation_script | 用于创建目标表的项目架构脚本的路径和名称。默认设置为 NULL。 | |
pre_creation_cmd | 可以在应用同步之前除去、删除或截断目的表的预创建命令。 | |
none | 不使用命令。 | |
drop | 除去目的表。 | |
delete | 删除目的表。 | |
truncate | 截断目的表。 | |
status | 指定属性的新状态。 | |
include column names | 在复制 INSERT 语句中允许有列名。 | |
no column names | 在复制 INSERT 语句中不允许有列名。 | |
owner qualified | 允许使用所有者限定的表名。 | |
not owner qualified | 允许使用不是所有者限定的表名。 | |
string literals | parameters | 指定日志读取器生成的命令是使用标准字符串文字命令格式还是新参数化命令格式。 | |
schema_option | 指定给定项目的架构生成选项位图。schema_option 的数据类型为 binary(8)。如果该值是 NULL,则系统将为该项目自动生成有效架构选项。"注释"中给出的表显示基于项目类型和复制类型的组合而选择的值。另外,并非所有的 schema_option 值对每个复制类型和项目类型都有效。"注释"中给出的"有效架构选项"表显示可基于项目类型和复制类型的组合进行选择的有效架构选项。 | |
0x00 | 禁用由初始同步提供的脚本并使用提供的创建脚本。 | |
0x01 | 生成对象创建(CREATE TABLE、CREATE PROCEDURE 等)。 | |
0x10 | 生成对应的聚集索引。 | |
0x20 | 将用户定义数据类型转换为基本数据类型。 | |
0x40 | 生成对应的非聚集索引。 | |
0x80 | 在主键上包含声明引用完整性。 | |
0x100 | 如果已定义,则复制表项目上的用户触发器。 | |
0x200 | 复制外键约束。如果引用的表不是发布的一部分,则将不复制已发布表上的所有外键约束。 | |
0x400 | 复制检查约束。 | |
0x800 | 复制默认值。 | |
0x1000 | 复制列级排序规则。 | |
0x2000 | 复制与已发布项目源对象关联的扩展的属性。 | |
0x4000 | 如果在表项目上定义了唯一键,则复制唯一键。 | |
0x8000 | 使用 ALTER TABLE 语句将表项目上的主键和唯一键作为约束复制。 | |
destination_owner | destination_owner | 目的对象所有者的名称。 |
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 指定对项目的更改将导致重新初始化现有的订阅,且提供使订阅重新初始化发生的权限。
0(成功)或 1(失败)
sp_changearticle 用于快照复制和事务复制。
在现有发布内,不必除去然后重新创建整个发布,就可以使用 sp_changearticle 更改某个项目。
该表描述如果用户传递的是 NULL 值,则为存储过程选择的 @schema_option 默认值。默认值基于表的第一行中显示的复制类型和第一列中显示的项目类型。空单元表示无效的项目类型和复制类型对,因而没有默认值。
项目类型 | 复制类型 | |
---|---|---|
事务复制 | 快照复制 | |
logbased | 0xF3 | 0x71 |
logbased manualfilter | 0xF3 | 0x71 |
logbased manualview | 0xF3 | 0x71 |
indexed view logbased | 0xF3 | 0x71 |
indexed view logbased manualfilter | 0xF3 | 0x71 |
indexed view logbased manualview | 0xF3 | 0x71 |
indexed view logbase manualboth | 0xF3 | 0x71 |
proc exec | 0x01 | 0x01 |
serialized proc exec | 0x01 | 0x01 |
proc schema only | 0x01 | 0x01 |
view schema only | 0x01 | 0x01 |
func schema only | 0x01 | 0x01 |
indexed view schema only | 0x01 | 0x01 |
table |
说明 如果为排队更新启用了发布,则 @schema_option 值 0x8000 和 0x0080 将被添加到下表所显示的默认值中。
有效架构选项表
项目类型 | 复制类型 | |
---|---|---|
事务复制 | 快照复制 | |
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 和 0x2000 | 0x01 和 0x2000 |
serialized proc exec | 0x01 和 0x2000 | 0x01 和 0x2000 |
proc schema only | 0x01 和 0x2000 | 0x01 和 0x2000 |
view schema only | 0x01、0x0100 和 0x2000 | 0x01、0x0100 和 0x2000 |
func schema only | 0x01 和 0x2000 | 0x01 和 0x2000 |
indexed view schema only | 0x01、0x10、0x040、0x0100 和 0x2000 | 0x01、0x10、0x040、0x0100 和 0x2000 |
table |
说明 对于排队更新发布,必须启用 @schema_option 值 0x8000 和 0x80。
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_changearticle。