sp_addmergesubscription (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,则表示订阅已向同步管理器进行了注册且可以在不启动 Microsoft SQL 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 参数,无法设置它。merge_job_name 为 sysname,默认值为 NULL。[ @hostname= ] 'hostname'
在参数化筛选器的 WHERE 子句中使用此函数时,会覆盖 HOST_NAME 返回的值。Hostname 的数据类型为 sysname,默认值为 NULL。
返回代码值
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'AdventureWorks2008R2Replica';
SET @hostname = N'adventure-works\david8'
-- Add a push subscription to a merge publication.
USE [AdventureWorks2008R2]
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。