sp_addmergearticle (Transact-SQL)

在现有合并发布中添加项目。 此存储过程是在发布服务器上针对发布数据库执行的。

主题链接图标 Transact-SQL 语法约定

语法

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 ]
    [ , [ @published_in_tran_pub = ] 'published_in_tran_pub' ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @logical_record_level_conflict_detection = ] 'logical_record_level_conflict_detection' ]
    [ , [ @logical_record_level_conflict_resolution = ] 'logical_record_level_conflict_resolution' ]
    [ , [ @partition_options = ] partition_options ]
    [ , [ @processing_order = ] processing_order ]
    [ , [ @subscriber_upload_options = ] subscriber_upload_options ]
    [ , [ @identityrangemanagementoption = ] 'identityrangemanagementoption' ]
    [ , [ @delete_tracking = ] delete_tracking ]
    [ , [ @compensate_for_errors = ] 'compensate_for_errors' ] 
    [ , [ @stream_blob_columns = ] 'stream_blob_columns' ]

参数

  • [ @publication= ] 'publication'
    包含项目的发布的名称。 publication 的数据类型为 sysname,无默认值。

  • [ @article= ] 'article'
    项目的名称。 该名称在发布中必须唯一。 article 的数据类型为 sysname,无默认值。 article 必须在运行 Microsoft SQL Server 的本地计算机上,并且必须符合有关标识符的规则。

  • [ @source_object= ] 'source_object'
    要发布的数据库对象。 source_object 的数据类型为 sysname,无默认值。 有关可使用合并复制发布的对象类型的详细信息,请参阅发布数据和数据库对象

  • [ @type= ] 'type'
    项目的类型。 type 的数据类型为 sysname,默认值为 table,可以为以下值之一。

    说明

    table (默认值)

    具有架构和数据的表。 复制会监视该表以确定要复制的数据。

    func schema only

    仅具有架构的函数。

    indexed view schema only

    仅具有架构的索引视图。

    proc schema only

    仅具有架构的存储过程。

    synonym schema only

    仅具有架构的同义词。

    view schema only

    仅具有架构的视图。

  • [ @description= ] 'description'
    项目的说明。 description 的数据类型为 nvarchar(255),默认值为 NULL。

  • [ @column_tracking= ] 'column_tracking'
    列级跟踪的设置。 column_tracking 的数据类型为 nvarchar(10),默认值为 FALSE。 true将打开列跟踪。 false 将关闭列跟踪,并在行级别进行冲突检测。 如果已经在其他合并发布中发布过该表,则使用的列跟踪值必须与基于此表的现有项目所用的值相同。 此参数只适用于表项目。

    注意注意

    如果行跟踪用于冲突检测(默认值),则基表最多可包含 1,024 列,但是必须从项目中筛选列,以便最多发布 246 列。 如果使用列跟踪,则基表最多可包含 246 列。

  • [ @status= ] 'status'
    项目的状态。 status 的数据类型为 nvarchar(10),默认值为 unsynced。 如果状态为 active,则运行初始处理脚本来发布表。 如果状态为 unsynced,则在下一次运行快照代理时运行发布表的初始处理脚本。

  • [ @pre_creation_cmd= ] 'pre_creation_cmd'
    指定应用快照时,如果订阅服务器上存在该表,系统将采取的操作。 pre_creation_cmd 的数据类型为 nvarchar(10),它可以为以下值之一。

    说明

    none

    如果订阅服务器上已存在该表,则不执行任何操作。

    delete

    根据子集筛选器中的 WHERE 子句发出 delete 命令。

    drop (默认值)

    删除该表,然后重新创建一个表。 需要它来支持 Microsoft SQL Server Compact 订阅服务器。

    truncate

    截断目标表。

  • [ @creation_script= ] 'creation_script'
    用于创建订阅数据库中项目的可选项目架构脚本的路径和名称。 creation_script 的数据类型为 nvarchar(255),默认值为 NULL。

    注意注意

    创建脚本不在 SQL Server Compact 订阅服务器上运行。

  • [ @schema_option= ] schema_option
    给定项目的架构生成选项的位图。 schema_option 的数据类型为 binary(8),并且可以是具有下列一个或多个值的 | (Bitwise OR) 产品。

    说明

    0x00

    禁用快照代理编写脚本,使用提供的架构预创建脚本(该脚本在 creation_script 中定义)。

    0x01

    生成对象创建(CREATE TABLE、CREATE PROCEDURE 等)。 这是存储过程项目的默认值。

    0x10

    生成对应的聚集索引。 即使不设置此选项,但如果已在已发布的表中定义与主键相关的索引以及 UNIQUE 约束,那么也会生成它们。

    0x20

    在订阅服务器中将用户定义数据类型 (UDT) 转换为基本数据类型。 如果 UDT 列是主键的一部分或者计算列引用 UDT 列,则当 UDT 列上具有 CHECK 或 DEFAULT 约束时,此选项无法使用。

    0x40

    生成相应的非聚集索引。 即使不设置此选项,但如果已在已发布的表中定义与主键相关的索引以及 UNIQUE 约束,那么也会生成它们。

    0x80

    复制 PRIMARY KEY 约束。 即使不启用选项 0x100x40,仍将复制与约束相关的任何索引。

    0x100

    如果已定义,则复制表项目的用户触发器。

    0x200

    复制 FOREIGN KEY 约束。 如果被引用的表不是发布的一部分,则不会复制已发布表的任何 FOREIGN KEY 约束。

    0x400

    复制检查约束。

    0x800

    复制默认值。

    0x1000

    复制列级排序规则。

    0x2000

    复制与已发布项目源对象关联的扩展属性。

    0x4000

    复制 UNIQUE 约束。 即使不启用选项 0x100x40,仍将复制与约束相关的任何索引。

    0x8000

    此选项对运行 SQL Server 2005 或更高版本的发布服务器无效。

    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) 用户定义类型 (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 的列的索引。

    如果此值为 NULL,则系统将自动为项目生成一个有效的架构选项。 “备注”部分的**“默认架构选项”表显示了根据项目类型选择的值。 而且,并非所有 schema_option 值都对每个复制类型和项目类型都有效。 “备注”部分给出的“有效架构选项”**表显示了可为给定项目类型指定的选项。

    注意注意

    schema_option 参数只影响初始快照的复制选项。 一旦快照代理生成了初始架构并在订阅服务器中应用了该架构,便会根据架构更改复制规则和 sp_addmergepublication 中指定的 replicate_ddl 参数设置,将发布架构更改复制到订阅服务器。 有关详细信息,请参阅对发布数据库进行架构更改

  • [ @subset_filterclause= ] 'subset_filterclause'
    WHERE 子句,用于指定表项目的水平筛选,但不含单词 WHERE。 subset_filterclause 属于 nvarchar(1000),默认值为空字符串。

    重要说明重要提示

    为提高性能,建议您不要在参数化行筛选子句中对列名应用函数,如 LEFT([MyColumn]) = SUSER_SNAME()。 如果在筛选子句中使用 HOST_NAME 并覆盖 HOST_NAME 值,则可能必须使用 CONVERT 转换数据类型。 有关此情况的最佳实践的详细信息,请参阅参数化行筛选器中的“覆盖 HOST_NAME() 值”部分。

  • [ @article_resolver= ] 'article_resolver'
    基于 COM 的冲突解决程序,用于解决表项目中的冲突或解决调用来对表项目执行自定义业务逻辑的 .NET Framework 程序集中的冲突。 article_resolver 的数据类型为 varchar(255),默认值为 NULL。 Microsoft 自定义冲突解决程序中列出了此参数的可用值。 如果提供的值并不属于 Microsoft 冲突解决程序,则 SQL Server 将使用指定的冲突解决程序代替系统提供的冲突解决程序。 使用 sp_enumcustomresolvers 可以枚举可用的自定义冲突解决程序的列表。 有关详细信息,请参阅在合并同步期间执行业务逻辑高级合并复制冲突的检测和解决

  • [ @resolver_info= ] 'resolver_info'
    用于指定自定义冲突解决程序所需的其他信息。 某些 Microsoft 冲突解决程序需要提供列作为冲突解决程序的输入。 resolver_info 的数据类型为 nvarchar(255),默认值为 NULL。 有关详细信息,请参阅 Microsoft 基于 COM 的冲突解决程序

  • [ @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_mergearticlecolumn 可添加列。

  • [ @auto_identity_range= ] 'automatic_identity_range'
    在创建表项目时允许或禁止在发布中对此表项目执行自动标识范围处理。 auto_identity_range 的数据类型为 nvarchar(5),默认值为 FALSE。 值为 true 指示启用自动标识范围处理,值为 false 指示禁用自动标识范围处理。

    注意注意

    不推荐使用 auto_identity_range,提供此参数只是为了向后兼容。 应使用 identityrangemanagementoption 来指定标识范围管理选项。 有关详细信息,请参阅复制标识列

  • [ @pub_identity_range= ] pub_identity_range
    使用自动标识范围管理时,控制分配给包含服务器订阅的订阅服务器的标识范围大小。 此标识范围是为重新发布订阅服务器保留的,用于分配给其自身的订阅服务器。 pub_identity_range 的数据类型为 bigint,默认值为 NULL。 如果 identityrangemanagementoption 值为 auto 或者 auto_identity_range 值为 true,则必须指定该参数。

  • [ @identity_range= ] identity_range
    使用自动标识范围管理时,控制分配给发布服务器和订阅服务器的标识范围大小。 identity_range 的数据类型为 bigint,默认值为 NULL。 如果 identityrangemanagementoption 值为 auto 或者 auto_identity_range 值为 true,则必须指定该参数。

    注意注意

    identity_range 控制使用 SQL Server 早期版本的重新发布订阅服务器上的标识范围大小。

  • [ @threshold= ] threshold
    百分比值,用于控制合并代理分配新标识范围的条件。 使用在 threshold 中指定的百分比值时,合并代理将创建新的标识范围。 threshold 的数据类型为 int,默认值为 NULL。 如果 identityrangemanagementoption 值为 auto 或者 auto_identity_range 值为 true,则必须指定该参数。

  • [ @verify_resolver_signature= ] verify_resolver_signature
    指定在合并复制中使用冲突解决程序之前是否验证数字签名。 verify_resolver_signature 的数据类型为 int,默认值为 1。

    值为 0时,指定将不验证签名。

    值为 1时,指定将验证签名以查看签名是否来自可信来源。

  • [ @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 指示禁用对项目使用交互式冲突解决程序。

    注意注意

    SQL Server Compact 订阅服务器不支持交互式冲突解决程序。

  • [ @fast_multicol_updateproc= ] 'fast_multicol_updateproc'
    不推荐使用此参数,保留它为了让脚本能够向后兼容。

  • [ @check_permissions= ] check_permissions
    表级权限的位图,合并代理将更改应用于发布服务器时将验证该权限。 如果合并进程使用的发布服务器登录名/用户帐户没有正确的表权限,则无效更改将被记录为冲突。 check_permissions 的数据类型为 int,可以是下列一个或多个值的 |(位或) 产品。

    说明

    0x00(默认值)

    不检查权限。

    0x10

    检查了发布服务器上的权限后,才能上载订阅服务器上的插入操作。

    0x20

    检查了发布服务器上的权限后,才能上载订阅服务器上的更新操作。

    0x40

    检查了发布服务器上的权限后,才能上载订阅服务器上的删除操作。

  • [ @force_invalidate_snapshot= ] force_invalidate_snapshot
    确认此存储过程所执行的操作是否会使现有快照失效。 force_invalidate_snapshot 数据类型为 bit,默认值为 0。

    0 指定添加项目不会导致快照失效。 如果该存储过程检测到更改确实需要新的快照,则会发生错误,并且不进行任何更改。

    1 指定如果添加项目,就可能导致快照无效;如果现有订阅需要新快照,则向其授予将现有快照标记为过时并生成新快照的权限。 向包含现有快照的发布中添加项目时,将 force_invalidate_snapshot 设置为 1

  • [ @published_in_tran_pub= ] 'published_in_tran_pub'
    指示合并发布中的项目也将在事务发布中发布。 published_in_tran_pub 的数据类型为 nvarchar(5),默认值为 FALSE。 值为 true 指定项目也在事务发布中发布。

  • [ @force_reinit_subscription= ] force_reinit_subscription
    确认此存储过程所执行的操作是否需要重新初始化现有订阅。 force_reinit_subscription 的数据类型为 bit,默认值为 0。

    0 指定添加项目不会导致重新初始化订阅。 如果该存储过程检测到更改将需要重新初始化现有订阅,则会发生错误,并且不执行任何更改。

    1 表示对合并项目的更改将导致重新初始化现有订阅,并且授予重新初始化订阅的权限。 如果 subset_filterclause 指定了参数化的行筛选器,则 force_reinit_subscription 将设置为 1

  • [ @logical_record_level_conflict_detection= ] 'logical_record_level_conflict_detection'
    指定作为逻辑记录成员的项目的冲突检测级别。 logical_record_level_conflict_detection 的数据类型为 nvarchar(5),默认值为 FALSE。

    值为 true 指示只要更改逻辑记录,就会检测到冲突,

    值为 false 指示按照 column_tracking 指定的情况使用默认冲突检测。 有关详细信息,请参阅通过逻辑记录对相关行的更改进行分组

    注意注意

    由于 SQL Server Compact 订阅服务器不支持逻辑记录,因此必须将 logical_record_level_conflict_detection 的值指定为 false 才可支持这些订阅服务器。

  • [ @logical_record_level_conflict_resolution= ] 'logical_record_level_conflict_resolution'
    为作为逻辑记录成员的项目指定冲突解决级别。 logical_record_level_conflict_resolution 的数据类型为 nvarchar(5),默认值为 FALSE。

    true 指示整个入选逻辑记录将覆盖落选逻辑记录;

    false 则指示入选行不受逻辑记录的约束。 如果 logical_record_level_conflict_detection 值为 true,则必须也将 logical_record_level_conflict_resolution 的值设置为 true。 有关详细信息,请参阅通过逻辑记录对相关行的更改进行分组

    注意注意

    由于 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= ] identityrangemanagementoption
    指定如何处理项目的标识范围管理。 identityrangemanagementoption 的数据类型为 nvarchar(10),它可以为以下值之一。

    说明

    none

    禁用标识范围管理。

    manual

    使用 NOT FOR REPLICATION 标记标识列,以启用手动标识范围处理。

    auto

    指定自动管理标识范围。

    NULL(默认值)

    如果 auto_identity_range 的值不是 true,则默认值为 none。

    为了向后兼容,当 identityrangemanagementoption 值为 NULL 时,将检查 auto_identity_range 值。 不过,在 identityrangemanagementoption 的值不为 NULL 时,则忽略 auto_identity_range 的值。 有关详细信息,请参阅复制标识列

  • [ @delete_tracking= ] 'delete_tracking'
    指示是否复制删除。 delete_tracking 的数据类型为 nvarchar(5),默认值为 TRUE。 值为 false 指示不复制删除内容,值为 true 指示复制删除内容,这是合并复制的常见行为。 如果将 delete_tracking 的值设置为 false,则必须在发布服务器上手动删除在订阅服务器上删除的行,同时必须在订阅服务器上手动删除在发布服务器上删除的行。

    重要说明重要提示

    将 delete_tracking 设置为 false 将导致无法收敛。 如果已在其他发布中发布了项目的源表,则两个项目的 delete_tracking 值必须相同。

    注意注意

    不能使用“新建发布向导”“发布属性”对话框设置 delete_tracking 选项。

  • [ @compensate_for_errors= ] 'compensate_for_errors'
    指示在同步期间遇到错误时是否采取补救措施。 compensate_for_errors i 的数据类型为 nvarchar(5),默认值为 FALSE。 如果设置为 true,那么一旦同步期间无法在订阅服务器或发布服务器上应用更改,则通常会导致采取补救措施来撤消更改;但如果有一台配置不正确的订阅服务器生成错误,则可能导致撤消在其他订阅服务器和发布服务器上所做的更改。 如果设置为 false 则禁用这些补救措施,但仍会将错误记录为需要采取补救措施,并且后续的合并会继续尝试应用更改,直到成功。

    重要说明重要提示

    尽管受影响行中的数据可能会无法收敛,但是只要解决了发生的错误,就可应用更改,并且数据也会收敛。 如果已在其他发布中发布了项目的源表,则两个项目的 compensate_for_errors 值必须相同。

  • [ @stream_blob_columns= ] '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_columns 设置为 true,某些合并复制功能(如逻辑记录)仍会阻止在复制二进制大型对象时使用流优化。

返回代码值

0(成功)或 1(失败)

注释

sp_addmergearticle 用于合并复制。

发布对象时,对象的定义会复制到订阅服务器。 如果要发布的数据库对象依赖于一个或多个其他对象,则必须发布所有被引用对象。 例如,如果要发布的视图依赖于一个表,则也必须发布该表。

如果指定 partition_options 的值为 3,则该项目中每个数据分区只能有一个订阅。 如果创建了另一个订阅,而这个新订阅的筛选条件解析到的分区与现有订阅的分区相同,则会删除现有订阅。

指定 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 及更高版本的兼容发布。

  • 0x08034FF1 -具有字符模式快照的 SQL Server 2005 及更高版本的兼容发布。

view schema only

0x01

注意注意

如果发布支持 SQL Server 的早期版本,则 table 的默认架构选项为 0x30034FF1

有效架构选项表

以下表说明各项目类型允许的 schema_option 值。

项目类型

架构选项值

func schema only

0x010x2000

indexed view schema only

0x010x0400x01000x20000x400000x10000000x200000

proc schema only

0x010x2000

table

所有选项。

view schema only

0x010x0400x01000x20000x400000x10000000x200000

示例

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 固定数据库角色的成员身份。

请参阅

参考

sp_changemergearticle (Transact-SQL)

sp_dropmergearticle (Transact-SQL)

sp_helpmergearticle (Transact-SQL)

复制存储过程 (Transact-SQL)

概念

定义项目

发布数据和数据库对象

复制标识列