在现有的合并发布中添加项目。此存储过程在发布服务器的发布数据库上执行。
sp_addmergearticle [ @publication = ] 'publication'
,
[ @article = ] 'article'
,
[ @source_object = ] 'source_object'
[ , [ @type = ] 'type' ]
[ , [ @description = ] 'description' ]
[ , [ @column_tracking = ] 'column_tracking' ]
[ , [ @status = ] 'status' ]
[ , [ @pre_creation_cmd = ] 'pre_creation_cmd' ]
[ , [ @creation_script = ] 'creation_script' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @subset_filterclause = ] 'subset_filterclause' ]
[ , [ @article_resolver = ] 'article_resolver' ]
[ , [ @resolver_info = ] 'resolver_info' ]
[ , [ @source_owner = ] 'source_owner' ]
[ , [ @destination_owner = ] 'destination_owner' ]
[ , [ @vertical_partition = ] 'vertical_partition' ]
[ , [ @auto_identity_range = ] 'auto_identity_range' ]
[ , [ @pub_identity_range = ] pub_identity_range ]
[ , [ @identity_range = ] identity_range ]
[ , [ @threshold = ] threshold ]
[ , [ @verify_resolver_signature = ] verify_resolver_signature ]
[ , [ @destination_object = ] 'destination_object' ]
[ , [ @allow_interactive_resolver = ] 'allow_interactive_resolver' ]
[ , [ @fast_multicol_updateproc = ] 'fast_multicol_updateproc' ]
[ , [ @check_permissions = ] check_permissions ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[@publication = ] 'publication'
是包含该项目的发布名。publication 的数据类型为 sysname,没有默认设置。
[@article = ] 'article'
是项目名。article 的数据类型为 sysname,没有默认设置。article 必须为本地 SQL Server 计算机,而且必须遵从标识符规则。
[@source_object = ] 'source_object'
是从其中添加项目的源对象名称。source_object 的数据类型为 sysname,没有默认设置。
[@type = ] 'type'
是项目类型。type 的数据类型为 sysname,默认设置为 table,可以是下列值之一。
值 | 描述 |
---|---|
table(默认值) | 项目监视表以确定已复制数据。 |
indexed view schema only | 项目监视索引视图和架构以确定源数据。 |
view schema only | 项目监视视图和架构以确定源数据。 |
proc schema only | 项目使用存储过程执行和架构以确定源数据。 |
func schema only | 项目使用用户定义的函数执行和架构以确定源数据。 |
NULL(默认值) |
[@description = ] 'description'
是对项目的描述。description 的数据类型为 nvarchar(255),默认设置为 NULL。
[@column_tracking = ] 'column_tracking'
是列级跟踪的设置。column_tracking 的数据类型为 nvarchar(10),默认设置为 FALSE。true 打开列跟踪。而 false 关闭列跟踪并在行级上保留冲突检测。如果已在其它合并发布中发布了表,则必须使用与基于该表的现有项目所用的相同的列跟踪值。该参数只专用于表项目。
[@status = ] 'status'
是项目状态。status 的数据类型为 nvarchar(10),默认设置为 unsynced。如果是 active,则表示发布表的初始处理脚本已运行。如果是 unsynced,则表示发布表的初始处理脚本在下一次运行快照代理程序时运行。
[@pre_creation_cmd = ] 'pre_creation_cmd'
如果表存在于订阅服务器上,指定系统在应用快照时所采取的操作。pre_creation_cmd 的数据类型为 nvarchar(10),可以是下列值之一。
值 | 描述 |
---|---|
None | 如果表已在订阅服务器上存在,则不采取任何操作。 |
Delete | 根据子集筛选中的 WHERE 子句发出删除命令。 |
drop(默认值) | 重新创建表之前先除去表。 |
Truncate | 与 delete 相同,但是删除页而非行。不要使用 WHERE 子句。 |
[@creation_script = ] 'creation_script'
是项目的可选架构预创建脚本。creation_script 的数据类型为 nvarchar(255),默认设置为 NULL。
[@schema_option = ] 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 语句将表项目上的主键和唯一键复制为约束。 |
[@subset_filterclause = ] 'subset_filterclause'
是 WHERE 子句,它指定表项目的水平筛选,不包含单词 WHERE。subset_filterclause 的数据类型为 nvarchar(1000),默认设置为空字符串。有关更多信息,请参见自动生成筛选。
[@article_resolver = ] 'article_resolver'
是用于解决表项目上的冲突的冲突解决程序。article_resolver 的数据类型为 varchar(255),默认设置为 NULL。此参数的可用值列在 Microsoft 冲突解决程序描述中。如果提供的值不是一个 Microsoft 冲突解决程序,则 SQL Server 使用指定的冲突解决程序代替系统所提供的冲突解决程序。使用 sp_enumcustomresolvers 枚举可用自定义冲突解决程序的列表。
[@resolver_info = ] 'resolver_info'
是用于指定自定义冲突解决程序所需的附加信息。某些 Microsoft 冲突解决程序要求将列作为冲突解决程序的输入提供。resolver_info 的数据类型为 nvarchar(255),默认设置为 NULL。有关更多信息,请参见 Microsoft 冲突解决程序描述。
[@source_owner = ] 'source_owner'
是 source_object 所有者的名称。source_owner 的数据类型为 sysname,默认设置为 NULL。如果是 NULL,则假定当前用户为所有者。
[@destination_owner = ] 'destination_owner'
是订阅数据库中的对象所有者(如果不是"dbo")。destination_owner 的数据类型为 sysname,默认设置为 NULL。如果是 NULL,则假设"dbo"为所有者。
[@vertical_partition = ] 'column_filter'
启用和禁用表项目上的列筛选。vertical_partition 的数据类型为 nvarchar(5),默认设置为 FALSE。false 表示没有垂直筛选,并发布所有的列。而 true 清除除声明的主键和 ROWGUID 外的所有列。列通过 sp_articlecolumn 被添加。
[@auto_identity_range = ] 'automatic_identity_range'
在创建发布时启用和禁用对发布上的表项目的自动标识范围处理。auto_identity_range 的数据类型为 nvarchar(5),默认设置为 FALSE。true 启用自动标识范围处理,false 则禁用它。有关更多信息,请参见管理标识值。
[@pub_identity_range = ] pub_identity_range
控制发布服务器上的范围大小(如果项目的 auto_identity_range 已设置为 true)。auto_identity_range 的数据类型为 bigint,默认设置为 NULL。
[@identity_range = ] identity_range
控制订阅服务器上的范围大小(如果项目的 auto_identity_range 已设置为 true)。identity_range 的数据类型为 bigint,默认设置为 NULL。
[@threshold = ] threshold
控制合并代理程序何时指派新标识范围的百分比值。当使用在 threshold 中指定的百分比值时,合并代理程序创建新标识范围。threshold 的数据类型为 int,默认设置为 NULL。当 auto_identity_range 设置为 true 时使用该参数。
[@verify_resolver_signature = ] verify_resolver_signature
指定是否在将冲突解决程序用于合并复制之前验证数字签名。verify_resolver_signature 的数据类型为 int,默认设置为 0。0 指定将不验证签名。1 指定将验证签名以查看它的来源是否可信。有关更多信息,请参见Replication Signature Verification Constants (SQLDMO_VERIFYSIGNATURE_TYPE)。
[@destination_object = ] 'destination_object'
是订阅数据库中的对象名称。destination_object 的数据类型为 sysname,默认设置与 @source_object 中的设置相同。只有当项目是纯架构的项目,如存储过程、视图和 UDF 时,才能指定此参数。如果指定的项目为表项目,则 @source_object 中的值将重写 destination_object 中的值。
[@allow_interactive_resolver = ] 'allow_interactive_resolver'
在项目上启用或禁用交互式冲突解决程序。allow_interactive_resolver 的数据类型为 nvarchar(5),默认设置为 FALSE。true 在项目上启用交互式冲突解决程序;而 false 禁用它。
[@fast_multicol_updateproc = ] 'fast_multicol_updateproc'
启用或禁用合并代理程序以对一个 UPDATE 语句中同一行内的多个列进行更改。fast_multicol_updateproc 的数据类型为 nvarchar(5),默认设置为 TRUE。true 更新一个语句中的多个列。而 false 对每个更改的列分别发出 UPDATE。出于性能上的考虑,如果更新两个或更多的列,最好将该值设置为 true。但是,如果表上有这样的用户触发器,它在通过 IF UPDATE(col) 检测到的特定列的更新时会产生错误,则应将该选项设置为 false。即使那列未更新为新值,IF UPDATE(col) 仍将检测到列的更新并产生错误。这是因为在将选项设置为 true 时,所有的列(除了象筛选中所涉及的列这样的特殊列)都在一个 UPDATE 语句中设置。如果特定列的值未更改,它即被设置为原来的值。
[@check_permissions = ] check_permissions
是表级权限的位图,当合并代理程序对发布服务器进行更改时系统会对其进行验证。如果合并进程所使用的发布服务器登录/用户帐户没有正确的表权限,则无效更改将会记录为冲突。check_permissions 的数据类型为 int,可以是下列值之一。
值 | 描述 |
---|---|
0x00(默认值) | 将不检查权限。 |
0x10 | 在可以上载订阅服务器上的 INSERT 操作之前检查发布服务器上的权限。 |
0x20 | 在可以上载订阅服务器上的 UPDATE 操作之前检查发布服务器上的权限。 |
0x40 | 在可以上载订阅服务器上进行的 DELETE 操作之前检查发布服务器上的权限。 |
[@force_invalidate_snapshot = ] force_invalidate_snapshot
确认此存储过程所采取的操作可能会使现有的快照无效。force_invalidate_snapshot 的数据类型为 bit,默认设置为 0。0 指定添加项目不会导致快照无效。如果存储过程检测到更改确实需要新快照,则会发生错误,且不会进行任何更改。而 1 指定添加项目可能会导致快照无效,而且如果有需要新快照的现有订阅,则值 1 将提供适当的权限,使现有快照被标记为废弃并生成新快照。
0(成功)或 1(失败)
sp_addmergearticle 用于合并复制。
该表描述如果用户传递的是 NULL 值,则为存储过程选择的 @schema_option 默认值。默认值基于表的第一行中显示的复制类型和第一列中显示的项目类型。空单元表示无效的项目类型和复制类型组合,因而没有默认值。
项目类型 | 复制类型 |
---|---|
合并 | |
logbased | |
logbased manualfilter | |
logbased manualview | |
indexed view logbased | |
indexed view logbased manualfilter | |
indexed view logbased manualview | |
indexed view logbase manualboth | |
proc exec | |
serialized proc exec | |
proc schema only | 0x01 |
view schema only | 0x01 |
func schema only | 0x01 |
indexed view schema only | 0x01 |
table | 0xccf1 |
有效架构选项表
项目类型 | 复制类型 |
---|---|
合并 | |
logbased | |
logbased manualfilter | |
logbased manualview | |
indexed view logbased | |
indexed view logbased manualfilter | |
indexed view logbased manualview | |
indexed view logbase manualboth | |
proc exec | 0x01 和 0x2000 |
serialized proc exec | 0x01 和 0x2000 |
proc schema only | 0x01 和 0x2000 |
view schema only | 0x01、0x0100 和 0x2000 |
func schema only | 0x01 和 0x2000 |
indexed view schema only | 0x01、0x10、0x040、0x0100 和 0x2000 |
table | 除 0x02 和 0x8000 外的所有选项 |
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_addmergearticle。