sp_addmergesubscription (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

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

Transact-SQL 语法约定

语法

sp_addmergesubscription
    [ @publication = ] N'publication'
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @subscriber_db = ] N'subscriber_db' ]
    [ , [ @subscription_type = ] N'subscription_type' ]
    [ , [ @subscriber_type = ] N'subscriber_type' ]
    [ , [ @subscription_priority = ] subscription_priority ]
    [ , [ @sync_type = ] N'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 = ] N'optional_command_line' ]
    [ , [ @description = ] N'description' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @offloadagent = ] offloadagent ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @use_interactive_resolver = ] N'use_interactive_resolver' ]
    [ , [ @merge_job_name = ] N'merge_job_name' ]
    [ , [ @hostname = ] N'hostname' ]
[ ; ]

参数

[ @publication = ] N'publication'

发布的名称。 @publicationsysname,无默认值。 该发布必须已存在。

[ @subscriber = ] N'subscriber'

订阅服务器的名称。 @subscriber为 sysname,默认值为 NULL.

[ @subscriber_db = ] N'subscriber_db'

订阅数据库的名称。 @subscriber_db为 sysname,默认值为 NULL.

[ @subscription_type = ] N'subscription_type'

订阅的类型。 @subscription_type为 nvarchar(15),默认值为 push.

  • 如果push添加推送订阅,并在分发服务器上添加合并代理。
  • 如果pull添加请求订阅,则无需在分发服务器上添加合并代理。

注意

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

[ @subscriber_type = ] N'subscriber_type'

订阅服务器的类型。 @subscriber_typenvarchar(15),可以是以下值之一。

说明
local(默认值) 订阅服务器仅对发布服务器是已知的。
global 订阅服务器对所有服务器都是已知的。

在 SQL Server 2005(9.x)及更高版本中,本地订阅称为客户端订阅,全局订阅称为服务器订阅。

[ @subscription_priority = ] subscription_priority

一个数字,指示订阅的优先级。 @subscription_priority真实的,默认值为 NULL. 对于本地和匿名订阅,优先级为 0.0。 对于全局订阅,优先级必须小于 100.0

[ @sync_type = ] N'sync_type'

订阅同步类型。 @sync_typenvarchar(15),默认值为 automatic.

  • 如果 automatic为已发布表,则首先将已发布表的架构和初始数据传输到订阅服务器。
  • 如果 none,则假定订阅服务器已具有已发布表的架构和初始数据。 始终会传输系统表和数据。

注意

建议不要指定值 none

[ @frequency_type = ] frequency_type

一个值,该值指示合并代理何时运行。 @frequency_typeint,可以是以下值之一。

说明
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 Last
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 Minute
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 = ] N'optional_command_line'

要执行的可选命令提示符。 @optional_command_linenvarchar(4000),默认值为 NULL. 此参数用于添加捕获输出并将输出保存到文件的命令,或者用于指定配置文件或属性。

[ @description = ] N'description'

此合并订阅的简要说明。 @descriptionnvarchar(255),默认值为 NULL. 此值由列中的复制监视器 Friendly Name 显示,该列可用于对受监视发布的订阅进行排序。

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

指定是否可以通过 Microsoft Windows 同步管理器同步订阅。 @enabled_for_syncmgrnvarchar(5),默认值为 false.

  • 如果 false订阅未注册到 Synchronization Manager。
  • 如果 true订阅已注册到同步管理器,并且可以在不启动 SQL Server Management Studio 的情况下进行同步。

[ @offloadagent = ] offloadagent

指定可远程激活代理。 @offloadagent为,默认值为 0.

此参数已弃用,并维护脚本的向后兼容性。

[ @offloadserver = ] N'offloadserver'

指定用于远程代理激活的服务器网络名称。 @offloadserver为 sysname,默认值为 NULL.

[ @use_interactive_resolver = ] N'use_interactive_resolver'

允许交互式地解决所有允许交互式解决的项目的冲突。 @use_interactive_resolver为 nvarchar(5),默认值为 false.

[ @merge_job_name = ] N'merge_job_name'

此参数已弃用,无法设置。 @merge_job_name为 sysname,默认值为 NULL.

[ @hostname = ] N'hostname'

在参数化筛选器的 WHERE 子句中使用此函数时,重写HOST_NAME返回的值。 @hostname为 sysname,默认值为 NULL.

重要

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

返回代码值

0(成功)或 1(失败)。

备注

sp_addmergesubscription用于合并副本 (replica)。

当由 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 [AdventureWorks2022];
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