sp_addmergesubscription (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'
发布的名称。 @publication 为 sysname,无默认值。 该发布必须已存在。
[ @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_type 为 nvarchar(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_type 为 nvarchar(15),默认值为 automatic
.
- 如果
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 |
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 |
Second |
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_line 为 nvarchar(4000),默认值为 NULL
. 此参数用于添加捕获输出并将输出保存到文件的命令,或者用于指定配置文件或属性。
[ @description = ] N'description'
此合并订阅的简要说明。 @description 为 nvarchar(255),默认值为 NULL
. 此值由列中的复制监视器 Friendly Name
显示,该列可用于对受监视发布的订阅进行排序。
[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'
指定是否可以通过 Microsoft Windows 同步管理器同步订阅。 @enabled_for_syncmgr 为 nvarchar(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
用于合并复制。
当由 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
。