sp_addmergearticle (Transact-SQL)
在现有合并发布中添加项目。 此存储过程在发布服务器上对发布数据库执行。
语法
sp_addmergearticle
[ @publication = ] N'publication'
, [ @article = ] N'article'
, [ @source_object = ] N'source_object'
[ , [ @type = ] N'type' ]
[ , [ @description = ] N'description' ]
[ , [ @column_tracking = ] N'column_tracking' ]
[ , [ @status = ] N'status' ]
[ , [ @pre_creation_cmd = ] N'pre_creation_cmd' ]
[ , [ @creation_script = ] N'creation_script' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @subset_filterclause = ] N'subset_filterclause' ]
[ , [ @article_resolver = ] N'article_resolver' ]
[ , [ @resolver_info = ] N'resolver_info' ]
[ , [ @source_owner = ] N'source_owner' ]
[ , [ @destination_owner = ] N'destination_owner' ]
[ , [ @vertical_partition = ] N'vertical_partition' ]
[ , [ @auto_identity_range = ] N'auto_identity_range' ]
[ , [ @pub_identity_range = ] pub_identity_range ]
[ , [ @identity_range = ] identity_range ]
[ , [ @threshold = ] threshold ]
[ , [ @verify_resolver_signature = ] verify_resolver_signature ]
[ , [ @destination_object = ] N'destination_object' ]
[ , [ @allow_interactive_resolver = ] N'allow_interactive_resolver' ]
[ , [ @fast_multicol_updateproc = ] N'fast_multicol_updateproc' ]
[ , [ @check_permissions = ] check_permissions ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @published_in_tran_pub = ] N'published_in_tran_pub' ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ , [ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection' ]
[ , [ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution' ]
[ , [ @partition_options = ] partition_options ]
[ , [ @processing_order = ] processing_order ]
[ , [ @subscriber_upload_options = ] subscriber_upload_options ]
[ , [ @identityrangemanagementoption = ] N'identityrangemanagementoption' ]
[ , [ @delete_tracking = ] N'delete_tracking' ]
[ , [ @compensate_for_errors = ] N'compensate_for_errors' ]
[ , [ @stream_blob_columns = ] N'stream_blob_columns' ]
[ ; ]
参数
[ @publication = ] N'publication'
包含项目的发布的名称。 @publication 为 sysname,无默认值。
[ @article = ] N'article'
项目的名称。 该名称在发布中必须唯一。 @article 为 sysname,无默认值。 @article必须位于运行 SQL Server 的本地计算机上,并且必须符合标识符的规则。
[ @source_object = ] N'source_object'
要发布的数据库对象。 @source_object为 sysname,无默认值。 有关可以使用合并复制发布的对象的类型的详细信息,请参阅 发布数据和数据库对象。
[ @type = ] N'type'
项目的类型。 @type是 sysname,默认值table
为 ,可以是以下值之一。
值 | 说明 |
---|---|
table (默认值) |
具有架构和数据的表。 复制会监视该表以确定要复制的数据。 |
func schema only |
仅具有架构的函数。 |
indexed view schema only |
仅具有架构的索引视图。 |
proc schema only |
仅具有架构的存储过程。 |
synonym schema only |
仅具有架构的同义词。 |
view schema only |
仅具有架构的视图。 |
[ @description = ] N'description'
文章的说明。 @description 为 nvarchar(255),默认值为 NULL
.
[ @column_tracking = ] N'column_tracking'
列级跟踪的设置。 @column_tracking为 nvarchar(10),默认值为 false
. false
打开列跟踪。 false
关闭列跟踪并在行级别保留冲突检测。 如果已经在其他合并发布中发布过该表,则使用的列跟踪值必须与基于此表的现有项目所用的值相同。 此参数只适用于表项目。
注意
如果行跟踪用于冲突检测(默认值),则基表最多可包含 1,024 列,但是必须从项目中筛选列,以便最多发布 246 列。 如果使用列跟踪,则基表最多可包含 246 列。
[ @status = ] N'status'
项目的状态。 @status为 nvarchar(10),默认值为 unsynced
. 如果 active
运行用于发布表的初始处理脚本。 如果unsynced
,则下次运行快照代理时运行用于发布表的初始处理脚本。
[ @pre_creation_cmd = ] N'pre_creation_cmd'
指定应用快照时,如果订阅服务器上存在该表,系统将采取的操作。 @pre_creation_cmd 为 nvarchar(10),可以是以下值之一。
值 | 说明 |
---|---|
none |
如果订阅服务器上已存在该表,则不执行任何操作。 |
delete |
根据子集筛选器中的 WHERE 子句发出 delete 命令。 |
drop (默认值) |
删除该表,然后重新创建一个表。 支持 SQL Server Compact 订阅服务器所必需的。 |
truncate |
截断目标表。 |
[ @creation_script = ] N'creation_script'
用于在订阅数据库中创建项目的可选项目架构脚本的路径和名称。 @creation_script为 nvarchar(255),默认值为 NULL
.
注意
创建脚本不会在 SQL Server Compact 订阅服务器上运行。
[ @schema_option = ] schema_option
给定文章的架构生成选项的位图。 @schema_option为 varbinary(8),可以是 |(按位或)其中一个或多个值的乘积。
值 | 说明 |
---|---|
0x00 |
禁用快照代理的脚本,并使用@creation_script中定义的提供的架构预创建脚本。 |
0x01 |
生成对象创建(CREATE TABLE CREATE PROCEDURE 等等)。 这是存储过程项目的默认值。 |
0x10 |
生成对应的聚集索引。 即使未设置此选项,也生成与主键和 UNIQUE 约束相关的索引(如果已在已发布的表上定义)。 |
0x20 |
在订阅服务器中将用户定义数据类型 (UDT) 转换为基本数据类型。 如果 UDT 列是主键的一部分,或者计算列引用 UDT 列,则不能使用此选项或 DEFAULT 约束。 |
0x40 |
生成相应的非聚集索引。 即使未设置此选项,也生成与主键和 UNIQUE 约束相关的索引(如果已在已发布的表上定义)。 |
0x80 |
PRIMARY KEY 复制约束。 即使选项 0x10 未 0x40 启用,也复制与约束相关的任何索引。 |
0x100 |
如果已定义,则复制表项目的用户触发器。 |
0x200 |
FOREIGN KEY 复制约束。 如果引用的表不是发布的一部分,则不会复制已发布表的所有 FOREIGN KEY 约束。 |
0x400 |
CHECK 复制约束。 |
0x800 |
复制默认值。 |
0x1000 |
复制列级排序规则。 |
0x2000 |
复制与已发布项目源对象关联的扩展属性。 |
0x4000 |
UNIQUE 复制约束。 即使选项 0x10 未 0x40 启用,也复制与约束相关的任何索引。 |
0x8000 |
此选项对运行 SQL Server 2005 (9.x) 及更高版本的发布服务器无效。 |
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 |
将公共语言运行时(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 |
复制地理和几何图形列的索引。 |
如果值为此值 NULL
,则系统会自动为项目生成有效的架构选项。 默认 架构选项表 显示基于项目类型选择的值。 此外,并非所有 @schema_option 值对每种类型的复制和项目类型都有效。 有效架构选项表显示可为给定项目类型指定的选项。
注意
@schema_option参数仅影响初始快照的复制选项。 快照代理生成初始架构并在订阅服务器上应用后,发布架构更改将基于架构更改复制规则以及sp_addmergepublication中指定的@replicate_ddl参数设置进行复制。 有关详细信息,请参阅对发布数据库进行架构更改。
[ @subset_filterclause = ] N'subset_filterclause'
一个 WHERE 子句,用于指定表项目的水平筛选而不包含 WHERE 一词。 @subset_filterclause为 nvarchar(1000),默认值为空字符串。
重要
出于性能原因,建议不要将函数应用于参数化行筛选器子句中的列名,例如 LEFT([MyColumn]) = SUSER_SNAME()
。 如果在 filter 子句中使用HOST_NAME并重写HOST_NAME
该值,则可能需要使用 CONVERT 转换数据类型。 有关此情况的最佳做法的详细信息,请参阅参数化筛选器 - 参数化行筛选器中的“重写 HOST_NAME() 值”部分。
[ @article_resolver = ] N'article_resolver'
用于解决表项目冲突的基于 COM 的解决程序,或调用的 .NET Framework 程序集对表项目执行自定义业务逻辑。 @article_resolver为 nvarchar(255),默认值为 NULL
. 此参数的可用值列在Microsoft自定义解析程序中。 如果提供的值不是Microsoft解析程序之一,SQL Server 将使用指定的解析程序而不是系统提供的解析程序。 用于 sp_enumcustomresolvers
枚举可用自定义解析程序的列表。 有关详细信息,请参阅 合并同步 期间执行业务逻辑和 高级合并复制 - 冲突检测和解决。
[ @resolver_info = ] N'resolver_info'
用于指定自定义解析程序所需的其他信息。 某些Microsoft解析程序需要提供作为解析程序的输入的列。 @resolver_info 为 nvarchar(517),默认值为 NULL
. 有关详细信息,请参阅 高级合并复制冲突 - 基于 COM 的冲突解决程序。
[ @source_owner = ] N'source_owner'
@source_object所有者的名称。 @source_owner为 sysname,默认值为 NULL
. 如果 NULL
为当前用户,则假定当前用户为所有者。
[ @destination_owner = ] N'destination_owner'
订阅数据库中对象的所有者(如果不是 dbo
)。 @destination_owner为 sysname,默认值为 NULL
. dbo
如果NULL
为所有者,则假定为所有者。
[ @vertical_partition = ] N'vertical_partition'
启用和禁用对表项目的列筛选。 @vertical_partition为 nvarchar(5),默认值为 false
.
false
指示没有垂直筛选并发布所有列。false
清除声明的主键和ROWGUID
列以外的所有列。 使用sp_mergearticlecolumn
..
[ @auto_identity_range = ] N'auto_identity_range'
在创建此表项目时启用和禁用此表项目自动标识范围处理。 @auto_identity_range为 nvarchar(5),默认值为 NULL
. false
启用自动标识范围处理,同时 false
禁用它。
注意
此参数已弃用,并维护脚本的向后兼容性。 应使用 @identityrangemanagementoption 来指定标识范围管理选项。 有关详细信息,请参阅复制标识列。
[ @pub_identity_range = ] pub_identity_range
使用自动标识范围管理时,控制分配给包含服务器订阅的订阅服务器的标识范围大小。 此标识范围是为重新发布订阅服务器保留的,用于分配给其自身的订阅服务器。 @pub_identity_range为 bigint,默认值为 NULL
. 如果@identityrangemanagementoption或auto
@auto_identity_range为 false
,则必须指定此参数。
[ @identity_range = ] identity_range
使用自动标识范围管理时,控制分配给发布服务器和订阅服务器的标识范围大小。 @identity_range为 bigint,默认值为 NULL
. 如果@identityrangemanagementoption或auto
@auto_identity_range为 false
,则必须指定此参数。
注意
@identity_range 使用以前版本的 SQL Server 在重新发布订阅服务器时控制标识范围大小。
[ @threshold = ] 阈值
百分比值,用于控制合并代理分配新标识范围的条件。 使用@threshold中指定的值的百分比时,合并代理会创建新的标识范围。 @threshold为 int,默认值为 NULL
. 如果@identityrangemanagementoption或auto
@auto_identity_range为 false
,则必须指定此参数。
[ @verify_resolver_signature = ] verify_resolver_signature
指定在合并复制中使用冲突解决程序之前是否验证数字签名。 @verify_resolver_signature为 int,默认值为 1
.
0
指定未验证签名。1
指定签名已验证,以查看签名是否来自受信任的源。
[ @destination_object = ] N'destination_object'
订阅数据库中的对象的名称。 @destination_object为 sysname,默认值为 @source_object。 仅当项目为仅架构项目(如存储过程、视图和 UDF 等)时,才能指定此参数。 如果指定的项目是表项目,则@source_object中的值将替代@destination_object中的值。
[ @allow_interactive_resolver = ] N'allow_interactive_resolver'
启用或禁用对项目使用交互式冲突解决程序。 @allow_interactive_resolver为 nvarchar(5),默认值为 false
. false
启用对项目使用交互式冲突解决程序; false
禁用它。
注意
SQL Server Compact 订阅服务器不支持交互式解析程序。
[ @fast_multicol_updateproc = ] N'fast_multicol_updateproc'
此参数已弃用,并维护脚本的向后兼容性。
[ @check_permissions = ] check_permissions
当合并代理向发布服务器应用更改时验证的表级权限的位图。 如果合并进程使用的发布服务器登录/用户帐户没有正确的表权限,则无效的更改将记录为冲突。 @check_permissions为 int,可以是 |(按位或)以下一个或多个值的乘积。
值 | 说明 |
---|---|
0x00 (默认值) |
未检查权限。 |
0x10 |
检查了发布服务器上的权限后,才能上载订阅服务器上的插入操作。 |
0x20 |
检查了发布服务器上的权限后,才能上载订阅服务器上的更新操作。 |
0x40 |
检查了发布服务器上的权限后,才能上载订阅服务器上的删除操作。 |
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
确认此存储过程执行的操作可能会使现有快照失效。 @force_invalidate_snapshot为位,默认值为 0
.
0
指定添加项目不会导致快照无效。 如果该存储过程检测到更改确实需要新的快照,则会发生错误,并且不进行任何更改。1
指定添加项目可能会导致快照无效,如果存在需要新快照的现有订阅,则授予将现有快照标记为已过时和生成的新快照的权限。 将项目添加到具有现有快照的发布时,将@force_invalidate_snapshot。1
[ @published_in_tran_pub = ] N'published_in_tran_pub'
指示合并发布中的项目也将在事务发布中发布。 @published_in_tran_pub为 nvarchar(5),默认值为 false
. false
指定项目也在事务发布中发布。
[ @force_reinit_subscription = ] force_reinit_subscription
确认此存储过程所执行的操作是否需要重新初始化现有订阅。 @force_reinit_subscription为位,默认值为 0
.
0
指定添加项目不会导致重新初始化订阅。 如果存储过程检测到更改需要重新初始化现有订阅,则会发生错误,并且不会进行任何更改。1
表示对合并项目所做的更改会导致重新初始化现有订阅,并授予订阅重新初始化的权限。 @force_reinit_subscription设置为1
@subset_filterclause指定参数化行筛选器时。
[ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection'
指定作为逻辑记录成员的项目的冲突检测级别。 @logical_record_level_conflict_detection为 nvarchar(5),默认值为 false
.
false
指定在逻辑记录中的任意位置发生更改时检测到冲突。false
指定默认冲突检测由 @column_tracking指定。 有关详细信息,请参阅通过逻辑记录对相关行的更改进行分组。
注意
由于 SQL Server Compact 订阅服务器不支持逻辑记录,因此必须指定@logical_record_level_conflict_detection的值false
才能支持这些订阅服务器。
[ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution'
为作为逻辑记录成员的项目指定冲突解决级别。 @logical_record_level_conflict_resolution为 nvarchar(5),默认值为 false
.
false
指定整个获胜逻辑记录覆盖丢失的逻辑记录。false
指定胜出行不受逻辑记录的约束。
如果@logical_record_level_conflict_detectionfalse
,则还必须将@logical_record_level_conflict_resolution设置为false
。 有关详细信息,请参阅通过逻辑记录对相关行的更改进行分组。
注意
由于 SQL Server Compact 订阅服务器不支持逻辑记录,因此必须指定@logical_record_level_conflict_resolution的值false
才能支持这些订阅服务器。
[ @partition_options = ] partition_options
定义项目数据的分区方式,当所有行只属于一个分区或只属于一个订阅时,这将可以实现性能优化。 @partition_options为 tinyint,可以是以下值之一。
值 | 说明 |
---|---|
0 (默认值) |
文章的筛选是静态的,或者不会为每个分区生成唯一的数据子集,即“重叠”分区。 |
1 |
分区重叠,订阅服务器上进行的数据操作语言(DML)更新无法更改行所属的分区。 |
2 |
对项目的筛选将生成不重叠分区,但多个订阅服务器可以接收到相同的分区。 |
3 |
对项目的筛选将为每个订阅生成唯一的不重叠分区。 |
注意
如果项目源表已在另一个发布中发布,则这两个项目@partition_options的值必须相同。
[ @processing_order = ] processing_order
指示合并发布中项目的处理顺序。 @processing_order为 int,默认值为 0
. 0
指定项目未排序,任何其他值表示本文处理顺序的序号值。 项目按值的由低到高顺序进行处理。 如果两篇文章具有相同的值,则处理顺序由 sysmergearticles 系统表中项目别名的顺序确定。 有关详细信息,请参阅指定合并复制属性。
[ @subscriber_upload_options = ] subscriber_upload_options
定义在包含客户端订阅的订阅服务器上进行更新的限制。 有关详细信息,请参阅使用仅下载项目优化合并复制性能。 @subscriber_upload_options为 tinyint,可以是以下值之一。
值 | 说明 |
---|---|
0 (默认值) |
无限制。 将订阅服务器上所做的更改上载到发布服务器。 |
1 |
订阅服务器上允许更改,但不会上传到发布服务器。 |
2 |
订阅服务器上不允许更改。 |
更改 @subscriber_upload_options 要求通过调用 sp_reinitmergepullsubscription(Transact-SQL)重新初始化订阅。
注意
如果某个项目的源表已经在另一个发布中发布,则两个项目的 @subscriber_upload_options 值必须相同。
[ @identityrangemanagementoption = ] N'identityrangemanagementoption'
指定如何处理项目的标识范围管理。 @identityrangemanagementoption 为 nvarchar(10),可以是以下值之一。
值 | 说明 |
---|---|
none |
禁用标识范围管理。 |
manual |
使用 NOT FOR REPLICATION 标记标识列,以启用手动标识范围处理。 |
auto |
指定自动管理标识范围。 |
NULL (默认值) |
none 默认值为@auto_identity_range的值不是 true 。 |
为了向后兼容,当@identityrangemanagementoption的值为NULL
时,将检查@auto_identity_range的值。 但是,如果@identityrangemanagementoption的值不是NULL
,则忽略@auto_identity_range的值。 有关详细信息,请参阅复制标识列。
[ @delete_tracking = ] N'delete_tracking'
指示是否复制删除。 @delete_tracking为 nvarchar(5),默认值为 true
. false
指示不会复制删除,并 true
指示复制删除,这是合并复制的常见行为。 @delete_tracking设置为false
时,必须在发布服务器上手动删除订阅服务器上删除的行,并且必须在订阅服务器上手动删除在发布服务器上删除的行。
重要
将 @delete_tracking 设置为 false
导致非收敛。 如果项目源表已在另一个发布中发布,则两个项目@delete_tracking的值必须相同。
注意
无法使用“新建发布向导”或“发布属性”对话框设置@delete_tracking选项。
[ @compensate_for_errors = ] N'compensate_for_errors'
指示在同步期间遇到错误时是否采取补救措施。 @compensate_for_errors为 nvarchar(5),默认值为 false
. 如果设置为 true
,同步期间无法在订阅服务器或发布服务器上应用的更改始终会导致补偿操作撤消更改;但是,错误配置的订阅服务器会导致其他订阅服务器和发布服务器发生更改。 false
禁用这些补偿操作,但是,错误仍记录为补偿,后续合并将继续尝试应用更改,直到成功。
重要
尽管受影响行中的数据可能会无法收敛,但是只要解决了发生的错误,就可应用更改,并且数据也会收敛。 如果项目源表已在另一个发布中发布,则这两个项目@compensate_for_errors的值必须相同。
[ @stream_blob_columns = ] N'stream_blob_columns'
指定在复制二进制大型对象列时使用数据流优化。 @stream_blob_columns为 nvarchar(5),默认值为 false
. true
表示将尝试优化。 启用 FILESTREAM 时, @stream_blob_columns设置为 true。 这使复制 FILESTREAM 数据的性能达到最佳并减少内存使用率。 若要强制 FILESTREAM 表项目不使用 blob 流式处理,请使用sp_changemergearticle
将@stream_blob_columns设置为 false。
重要
启用此内存优化可能会降低同步期间合并代理的性能。 仅当复制包含数兆字节数据的列时,才应使用此选项。
注意
某些合并复制功能(如逻辑记录)仍可以阻止在复制二进制大型对象时使用流优化,即使设置为@stream_blob_columnstrue
也是如此。
返回代码值
0
(成功)或 1
(失败)。
注解
sp_addmergearticle
用于合并复制。
发布对象时,对象的定义会复制到订阅服务器。 如果要发布依赖于一个或多个其他对象的数据库对象,则必须发布所有引用的对象。 例如,如果要发布的视图依赖于一个表,则也必须发布该表。
如果为@partition_options指定值3
:
本文中每个数据分区只能有一个订阅。 如果创建了另一个订阅,而这个新订阅的筛选条件解析到的分区与现有订阅的分区相同,则会删除现有订阅。
每当合并代理运行时,元数据就会清理,分区快照会更快地过期。 使用此选项时,应考虑启用订阅服务器请求的分区快照。 有关详细信息,请参阅 为包含参数化筛选器的合并发布创建快照。
如果将具有静态水平筛选器的项目(使用 @subset_filterclause)添加到具有参数化筛选器的项目的现有发布,则必须重新初始化订阅。
在指定 @processing_order时,我们建议在项目顺序值之间留出空白,这样以后可以更轻松地设置新值。 例如,如果你有三篇文章、Article1
、Article2
以及Article3
@processing_order设置为10
、20
以及30
,而不是1
,2
以及。3
有关详细信息,请参阅指定合并复制属性。
默认架构选项表
下表描述了存储过程设置的默认值(如果为@schema_option指定了值NULL
,具体取决于项目类型)。
文章类型 | 架构选项值 |
---|---|
func schema only |
0x01 |
indexed view schema only |
0x01 |
proc schema only |
0x01 |
table |
0x0C034FD1 - SQL Server 2005 (9.x) 和更高版本的兼容发布与本机模式快照。0x08034FF1 - SQL Server 2005 (9.x) 和更高版本的兼容发布与字符模式快照。 |
view schema only |
0x01 |
注意
如果发布支持早期版本的 SQL Server,则默认 table
架构选项为 0x30034FF1
。
有效的架构选项表
下表根据项目类型@schema_option描述了允许的值。
文章类型 | 架构选项值 |
---|---|
func schema only |
0x01 和 0x2000 |
indexed view schema only |
0x01 、0x040 、0x0100 、0x2000 、0x40000 、0x1000000 和 0x200000 |
proc schema only |
0x01 和 0x2000 |
table |
所有选项。 |
view schema only |
0x01 、0x040 、0x0100 、0x2000 、0x40000 、0x1000000 和 0x200000 |
示例
DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesOrderHeader';
SET @table3 = N'SalesOrderDetail';
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';
-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle
@publication = @publication,
@article = @table1,
@source_object = @table1,
@type = N'table',
@source_owner = @hrschema,
@schema_option = 0x0004CF1,
@description = N'article for the Employee table',
@subset_filterclause = @filterclause;
-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle
@publication = @publication,
@article = @table2,
@source_object = @table2,
@type = N'table',
@source_owner = @salesschema,
@vertical_partition = N'true',
@schema_option = 0x0034EF1,
@description = N'article for the SalesOrderDetail table';
-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle
@publication = @publication,
@article = @table3,
@source_object = @table3,
@source_owner = @salesschema,
@description = 'article for the SalesOrderHeader table',
@identityrangemanagementoption = N'auto',
@pub_identity_range = 100000,
@identity_range = 100,
@threshold = 80,
@schema_option = 0x0004EF1;
-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn
@publication = @publication,
@article = @table2,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn
@publication = @publication,
@article = @table2,
@column = N'CreditCardApprovalCode',
@operation = N'drop',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter
@publication = @publication,
@article = @table2,
@filtername = N'SalesOrderHeader_Employee',
@join_articlename = @table1,
@join_filterclause = N'Employee.BusinessEntityID = SalesOrderHeader.SalesPersonID',
@join_unique_key = 1,
@filter_type = 1,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter
@publication = @publication,
@article = @table3,
@filtername = N'SalesOrderDetail_SalesOrderHeader',
@join_articlename = @table2,
@join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID',
@join_unique_key = 1,
@filter_type = 1,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
权限
要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。