sp_addmergesubscription (Transact-SQL)

更新日期: 2007 年 9 月 15 日

创建推送合并订阅或请求合并订阅。 此存储过程在发布服务器上对发布数据库执行。

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

语法

sp_addmergesubscription [ @publication= ] 'publication'
    [ , [ @subscriber = ] 'subscriber' ]
    [ , [ @subscriber_db= ] 'subscriber_db' ]
    [ , [ @subscription_type= ] 'subscription_type' ]
    [ , [ @subscriber_type= ] 'subscriber_type' ]
    [ , [ @subscription_priority= ] subscription_priority ]
    [ , [ @sync_type= ] 'sync_type' ]
    [ , [ @frequency_type= ] frequency_type ]
    [ , [ @frequency_interval= ] frequency_interval ]
    [ , [ @frequency_relative_interval= ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor= ] frequency_recurrence_factor ]
    [ , [ @frequency_subday= ] frequency_subday ]
    [ , [ @frequency_subday_interval= ] frequency_subday_interval ]
    [ , [ @active_start_time_of_day= ] active_start_time_of_day ]
    [ , [ @active_end_time_of_day= ] active_end_time_of_day ]
    [ , [ @active_start_date= ] active_start_date ]
    [ , [ @active_end_date= ] active_end_date ]
    [ , [ @optional_command_line= ] 'optional_command_line' ]
    [ , [ @description= ] 'description' ]
    [ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
    [ , [ @offloadagent= ] remote_agent_activation]
    [ , [ @offloadserver= ] 'remote_agent_server_name' ]
    [ , [ @use_interactive_resolver= ] 'use_interactive_resolver' ]
    [ , [ @merge_job_name= ] 'merge_job_name' ]
    [ , [ @hostname = ] 'hostname'

参数

  • [ @publication = ] 'publication'
    发布的名称。publication 的数据类型为 sysname,无默认值。 该发布必须已存在。
  • [ @subscriber=] 'subscriber'
    订阅服务器的名称。subscriber 的数据类型为 sysname,默认值为 NULL。
  • [ @subscriber_db=] 'subscriber_db'
    订阅服务器数据库的名称。subscriber_db的数据类型为 sysname,默认值为 NULL。
  • [ @subscription_type=] 'subscription_type'
    订阅的类型。subscription_typenvarchar(15),默认值为 PUSH。 如果为 push,则添加推送订阅,并在分发服务器上添加合并代理。 如果为 pull,则添加请求订阅,而不在分发服务器上添加合并代理。

    ms187717.note(zh-cn,SQL.90).gif注意:
    匿名订阅无需使用此存储过程。
  • [ @subscriber_type=] 'subscriber_type'
    是订阅服务器的类型。subscriber_typenvarchar(15),可以是下列值之一。

    说明

    local(默认值)

    订阅服务器仅对发布服务器是已知的。

    global

    订阅服务器对所有服务器都是已知的。

    在 SQL Server 2005 中,本地订阅称为客户端订阅,而全局订阅则称为服务器订阅。 有关详细信息,请参阅合并复制如何检测和解决冲突中的“订阅类型”部分。

  • [ @subscription_priority=] subscription_priority
    表示订阅优先级的数字。subscription_priorityreal,默认值为 NULL。 对于本地订阅和匿名订阅,优先级为 0.0。 对于全局订阅,优先级必须小于 100.0。
  • [ @sync_type=] 'sync_type'
    订阅同步类型。sync_type的数据类型为 nvarchar(15),默认值为 automatic。 可以为 automaticnone。 如果为 automatic,已发布表的架构和初始数据将首先传输到订阅服务器。 如果为 none,将假定订阅服务器已经拥有已发布表的架构和初始数据。 始终会传输系统表和数据。

    ms187717.note(zh-cn,SQL.90).gif注意:
    不建议指定 none 值。 有关详细信息,请参阅初始化合并订阅(不使用快照)
  • [ @frequency_type = ] frequency_type
    指示合并代理何时运行的值。frequency_type 的数据类型为 int,可以是下列值之一。

    说明

    1

    一次

    4

    每天

    8

    每周

    10

    每月

    20

    每月,相对于频率间隔

    40

    当 SQL Server 代理启动时

    NULL(默认值)

     

  • [ @frequency_interval = ] frequency_interval
    合并代理运行的日子。frequency_interval 的数据类型为 int,可以是下列值之一。

    说明

    1

    星期日

    2

    星期一

    3

    星期二

    4

    星期三

    5

    星期四

    6

    星期五

    7

    星期六

    8

    9

    工作日

    10

    周末

    NULL(默认值)

     

  • [ @frequency_relative_interval = ]frequency_relative_interval
    是每月已计划的合并出现的频率间隔。frequency_relative_interval 的数据类型为 int,可以是下列值之一。

    说明

    1

    第一个

    2

    第二个

    4

    第三个

    8

    第四个

    16

    最后一个

    NULL(默认值)

     

  • [ @frequency_recurrence_factor = ] frequency_recurrence_factor
    frequency_type 使用的重复因子。frequency_recurrence_factor的数据类型为 int,默认值为 NULL。
  • [ @frequency_subday = ]frequency_subday
    frequency_subday_interval 的单位。frequency_subday 的数据类型为 int,可以是下列值之一。

    说明

    1

    一次

    2

    4

    分钟

    8

    小时

    NULL(默认值)

     

  • [ @frequency_subday_interval = ]frequency_subday_interval
    各合并间 frequency_subday 发生的频率。frequency_subday_interval 的数据类型为 int,默认值为 NULL。
  • [ @active_start_time_of_day = ] active_start_time_of_day
    第一次安排合并代理的时间,格式为 HHMMSS。active_start_time_of_day 的数据类型为 int,默认值为 NULL。
  • [ @active_end_time_of_day = ] active_end_time_of_day
    停止安排合并代理的时间,格式为 HHMMSS。active_end_time_of_day 的数据类型为 int,默认值为 NULL。
  • [ @active_start_date = ] active_start_date
    第一次安排合并代理的日期,格式为 YYYYMMDD。active_start_date 的数据类型为 int,默认值为 NULL。
  • [ @active_end_date = ] active_end_date
    停止安排合并代理的日期,格式为 YYYYMMDD。active_end_date 的数据类型为 int,默认值为 NULL。
  • [ @optional_command_line=] 'optional_command_line'
    要执行的可选命令提示符。optional_command_line的数据类型为 nvarchar(4000),默认值为 NULL。 此参数用于添加捕获输出并将输出保存到文件的命令,或者用于指定配置文件或属性。
  • [ @description =] 'description'
    对该合并订阅的简短说明。description的数据类型为 nvarchar(255),默认值为 NULL。 此值由复制监视器显示在“友好名称”列中,该列可以用来对所监视发布的订阅进行排序。
  • [ @enabled_for_syncmgr=] 'enabled_for_syncmgr'
    表示是否可以通过 Microsoft Windows 同步管理器同步订阅。enabled_for_syncmgr 的数据类型为 nvarchar(5),默认值为 FALSE。 如果为 False,则表示该订阅没有向同步管理器注册。 如果为 true,则表示该订阅向同步管理器进行注册,可以在不启动 Microsoft SQL Server Management Studio 的情况下进行同步。
  • [ @offloadagent= ] remote_agent_activation
    指定可以远程激活代理。remote_agent_activation 的数据类型为 bit,默认值为 0

    ms187717.note(zh-cn,SQL.90).gif注意:
    不推荐使用此参数,保留它只是为了让脚本能够向后兼容。
  • [ @offloadserver= ] 'remote_agent_server_name'
    指定用于远程代理激活的服务器的网络名称。remote_agent_server_name 的数据类型为 sysname,默认值为 NULL。
  • [ @use_interactive_resolver= ] 'use_interactive_resolver'
    允许交互式解决所有允许交互式解决方法的项目的冲突。use_interactive_resolver 的数据类型为 nvarchar(5),默认值为 FALSE。
  • [ @merge_job_name= ] 'merge_job_name'
    为该订阅添加的合并代理作业的名称。merge_job_name 的数据类型为 sysname,默认值为 NULL。 此参数允许提供合并代理作业名称,如此便可在以后管理该作业。
  • [ @hostname= ] 'hostname'
    在参数化筛选器的 WHERE 子句中使用此函数时,覆盖 HOST_NAME 返回的值。Hostname 的数据类型为 sysname,默认值为 NULL。

    ms187717.note(zh-cn,SQL.90).gif重要提示:
    出于性能方面的考虑,我们建议您不要将这些函数应用于参数化行筛选子句(如 LEFT([MyColumn]) = SUSER_SNAME())中的列名。 如果在筛选子句中使用了 HOST_NAME,并覆盖 HOST_NAME 值,则可能需要使用 CONVERT 来转换数据类型。 有关此情况的最佳实践的详细信息,请参阅主题参数化行筛选器中的“覆盖 HOST_NAME() 值”部分。

返回代码值

0(成功)或 1(失败)

备注

sp_addmergesubscription 用于合并复制。

sysadmin 固定服务器角色成员执行 sp_addmergesubscription 来创建推送订阅时,合并代理作业便会隐式创建,并且该作业使用 SQL Server 代理服务帐户运行。 我们建议您执行 sp_addmergepushsubscription_agent 来为 @job_login@job_password 指定另一个不同的特定于代理的 Windows 帐户的凭据。 有关详细信息,请参阅复制代理安全性模式

权限

只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_addmergesubscription

示例

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

请参阅

参考

sp_changemergesubscription (Transact-SQL)
sp_dropmergesubscription (Transact-SQL)
sp_helpmergesubscription (Transact-SQL)

其他资源

如何创建推送订阅(复制 Transact-SQL 编程)
如何创建请求订阅(复制 Transact-SQL 编程)
交互式冲突解决
订阅发布

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2007 年 9 月 15 日

新增内容:
  • 添加了不建议为 @sync_type 参数指定 none 值的说明。