sp_addmergesubscription (Transact-SQL)

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

主题链接图标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_type的数据类型为 nvarchar(15),默认值为 PUSH。 如果为 push,则添加推送订阅并在分发服务器上添加合并代理。 如果为 pull,则添加请求订阅而不在分发服务器上添加合并代理。

    注意注意

    匿名订阅无需使用此存储过程。

  • [ @subscriber_type=] 'subscriber_type'
    订阅服务器的类型。subscriber_type的数据类型为 nvarchar(15),可以为以下值之一。

    说明

    local(默认值)

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

    global

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

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

  • [ @subscription_priority=] subscription_priority
    表示订阅的优先级的数字。subscription_priority的数据类型为 real,默认值为 NULL。对于本地订阅和匿名订阅,优先级为 0.0。 对于全局订阅,优先级必须小于 100.0。

  • [ @sync_type=] 'sync_type'
    订阅的同步类型。sync_type的数据类型为 nvarchar(15),默认值为 automatic。 可以为 automatic 或 none。 如果为 automatic,则表示已发布表的架构和初始数据将首先传输到订阅服务器。 如果为 none,则假定订阅服务器已拥有已发布表的架构和初始数据。始终会传输系统表和数据。

    注意注意

    建议不要将值指定为 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,则表示订阅已向同步管理器进行了注册且可以在不启动 MicrosoftSQL Server Management Studio 的情况下同步。

  • [ @offloadagent= ] remote_agent_activation
    指定可以远程激活代理。remote_agent_activation 的数据类型为 bit,默认值为 0

    注意注意

    不推荐使用此参数,保留它只是为了让脚本能够向后兼容。

  • [ @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。

    重要说明重要提示

    出于性能方面的考虑,我们建议您不要将这些函数应用于参数化行筛选子句(如 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 帐户的凭据。 有关详细信息,请参阅复制代理安全性模式

示例

-- 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

权限

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