sp_addmergearticle (Transact-SQL)

更新日期: 2006 年 4 月 14 日

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

主题链接图标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,可以是下列值之一:

    Value 说明

    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 则关闭列跟踪,并在行级别进行冲突检测。 如果已经在其他合并发布中发布过该表,则使用的列跟踪值必须与基于此表的现有项目所用的值相同。 此参数只适用于表项目。

    ms174329.note(zh-cn,SQL.90).gif注意:
    如果行跟踪用于冲突检测(默认值),则基表最多可包含 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 2005 Compact Edition 订阅服务器。

    truncate

    截断目标表。

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

    ms174329.note(zh-cn,SQL.90).gif注意:
    创建脚本不在 SQL Server 2005 Compact Edition 订阅服务器上运行。
  • [ @schema_option= ] schema_option
    给定项目的架构生成选项的位图。schema_option 的数据类型为 binary(8),并且可以是具有下列一个或多个值的 | (Bitwise OR) 产品:

    Value

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

    ms174329.note(zh-cn,SQL.90).gif重要提示:
    为提高性能,建议您不要在参数化行筛选子句中对列名应用函数,如 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 时则禁用。

    ms174329.note(zh-cn,SQL.90).gif注意:
    不推荐使用 auto_identity_range,提供此参数只是为了向后兼容。 应使用 identityrangemanagementoption 来指定标识范围管理选项。 有关详细信息,请参阅复制标识列
  • [ @pub_identity_range= ] pub_identity_range
    使用自动标识范围管理时,控制分配给包含服务器订阅的订阅服务器的标识范围大小。 此标识范围是为某个重新发布订阅服务器保留的,用于分配给其自身的订阅服务器。pub_identity_range 的数据类型为 bigint,默认值为 NULL。 如果 identityrangemanagementoptionauto 或如果 auto_identity_rangeTrue,则必须指定此参数。
  • [ @identity_range= ] identity_range
    使用自动标识范围管理时,控制分配给发布服务器和订阅服务器的标识范围大小。identity_range 的数据类型为 bigint,默认值为 NULL。 如果 identityrangemanagementoptionauto 或如果 auto_identity_rangeTrue,则必须指定此参数。

    ms174329.note(zh-cn,SQL.90).gif注意:
    identity_range 可以控制使用 SQL Server 早期版本的重新发布订阅服务器上的标识范围大小。
  • [ @threshold= ] threshold
    百分比值,用于控制合并代理分配新标识范围的条件。 如果使用 threshold 中指定的百分比值,则合并代理将创建新的标识范围。threshold 的数据类型为 int,默认值为 NULL。 如果 identityrangemanagementoptionauto 或如果 auto_identity_rangeTrue,则必须指定此参数。
  • [ @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 时则禁用。

    ms174329.note(zh-cn,SQL.90).gif注意:
    SQL Server 2005 Compact Edition 订阅服务器不支持交互式冲突解决程序。
  • [ @fast_multicol_updateproc= ] 'fast_multicol_updateproc'
    不推荐使用此参数,保留它为了让脚本能够向后兼容。
  • [ @check_permissions= ] check_permissions
    表级权限的位图,合并代理将更改应用于发布服务器时将验证该权限。 如果合并进程使用的发布服务器登录名/用户帐户没有正确的表权限,则将无效更改将记录为冲突。check_permissions 的数据类型为 int,可以是下列一个或多个值的 | (位或) 产品。

    Value 说明

    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 指定的默认冲突检测。 有关详细信息,请参阅通过逻辑记录对相关行的更改进行分组

    ms174329.note(zh-cn,SQL.90).gif注意:
    由于 SQL Server 2005 Compact Edition 订阅服务器不支持逻辑记录,因此必须将 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_detectiontrue,还必须将 logical_record_level_conflict_resolution 设置为 true。 有关详细信息,请参阅通过逻辑记录对相关行的更改进行分组

    ms174329.note(zh-cn,SQL.90).gif注意:
    由于 SQL Server 2005 Compact Edition 订阅服务器不支持逻辑记录,因此必须将 logical_record_level_conflict_detection 的值指定为 false,才能支持这些订阅服务器。
  • [ @partition_options= ] partition_options
    定义项目中数据的分区方式,当所有行只属于一个分区或只属于一个订阅时,就启用性能优化。partition_options 的数据类型是 tinyint,可以为下列值之一:

    说明

    0(默认值)

    项目的筛选是静态的,或者不会为每个分区生成一个唯一数据子集(即“重叠”分区)。

    1

    分区是重叠的,订阅服务器中执行的数据操作语言 (DML) 更新不能更改行所属的分区。

    2

    对项目的筛选将生成不重叠分区,但多个订阅服务器可以接收到相同的分区。

    3

    对项目的筛选将为每个订阅生成唯一的不重叠分区。

    ms174329.note(zh-cn,SQL.90).gif注意:
    如果已在其他发布中发布了项目的源表,则两个项目的 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

    不允许在订阅服务器上进行更改。

    ms174329.note(zh-cn,SQL.90).gif注意:
    如果已在其他发布中发布了项目的源表,则两个项目的 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,则必须在发布服务器上手动删除在订阅服务器上删除的行,同时必须在订阅服务器上手动删除在发布服务器上删除的行。

    ms174329.note(zh-cn,SQL.90).gif重要提示:
    delete_tracking 设置为 false 将导致无法收敛。 如果已在其他发布中发布了项目的源表,则两个项目的 delete_tracking 值必须相同。
    ms174329.note(zh-cn,SQL.90).gif注意:
    不能使用“新建发布向导”“发布属性”对话框设置 delete_tracking 选项。
  • [ @compensate_for_errors= ] 'compensate_for_errors'
    指示在同步过程中遇到错误时是否执行补救措施。compensate_for_errors i 的数据类型是 nvarchar(5),默认值为 FALSE。 如果设置为 true,那么一旦同步期间无法在订阅服务器或发布服务器上应用更改,必将导致采取补救措施来撤消更改;但是,如果有一台生成错误的订阅服务器配置不正确,就可能导致撤消在其他订阅服务器和发布服务器上的更改。如果设置为 false,则禁用补救措施,但仍会将错误记录为需要采取补救措施,并且后续的合并会继续尝试应用更改,直到成功。

    ms174329.note(zh-cn,SQL.90).gif注意:
    对于运行 Microsoft SQL Server 2000 8.00.858 版和更低版本(包括 SP3)的订阅服务器上的请求订阅,即使将 compensate_for_errors 设置为 false,也仍会发生补救措施。
    ms174329.note(zh-cn,SQL.90).gif重要提示:
    尽管受影响行中的数据可能会无法收敛,但是只要解决了发生的错误,就可应用更改,并且数据也会收敛。 如果已在其他发布中发布了项目的源表,则两个项目的 compensate_for_errors 值必须相同。
  • [ @stream_blob_columns= ] 'stream_blob_columns'
    指定在复制二进制大型对象列时,使用数据流优化。stream_blob_columns 的数据类型为 nvarchar(5),默认值为 FALSE。值为 true 时,表示将尝试进行优化。

    ms174329.note(zh-cn,SQL.90).gif重要提示:
    启用此内存优化可能会在同步期间降低合并代理的性能。 仅当复制包含数兆字节数据的列时,才应使用此选项。
    ms174329.note(zh-cn,SQL.90).gif注意:
    即使将 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 兼容发布。
  • 0x30034FF1 - SQL Server 2000 及更低版本的兼容发布。

view schema only

0x01

ms174329.note(zh-cn,SQL.90).gif注意:
如果发布支持 SQL Server 的早期版本,则 table 的默认架构选项为 0x30034FF1

有效架构选项表

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

项目类型 架构选项值

func schema only

0x010x2000

indexed view schema only

0x010x0400x01000x20000x400000x10000000x200000

proc schema only

0x010x2000

table

所有选项。

view schema only

0x010x0400x01000x20000x400000x10000000x200000

权限

要求具有 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。

示例

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.EmployeeID = 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

请参阅

参考

sp_changemergearticle (Transact-SQL)
sp_dropmergearticle (Transact-SQL)
sp_helpmergearticle (Transact-SQL)
复制存储过程 (Transact-SQL)

其他资源

How to: Define an Article (Replication Transact-SQL Programming)
发布数据和数据库对象
复制标识列
合并复制如何检测和解决冲突

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 4 月 14 日

更改的内容:
  • 更新了对 schema_option 参数的 0x20000000 值的说明。

2005 年 12 月 5 日

新增内容:
  • 记录了为 schema_option 参数设置 0x20 选项时的其他限制。
  • 记录了对已发布表的列限制。
更改的内容:
  • 更新了有关表项目的默认架构选项值的信息。