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_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 Agent 啟動時
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 Synchronization Manager 同步處理訂閱。enabled_for_syncmgr 是 nvarchar(5),預設值是 FALSE。如果是 false,便不用向 Synchronization Manager 註冊訂閱。如果是 true,便要向 Synchronization Manager 註冊訂閱,且不需要啟動 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。
傳回碼值
0 (成功) 或 1 (失敗)
備註
sp_addmergesubscription 用於合併式複寫中。
當系統管理員 (sysadmin) 固定伺服器角色的成員執行 sp_addmergesubscription 來建立發送訂閱時,系統會隱含地建立合併代理程式作業,而且會利用 SQL Server Agent 服務帳戶來執行這項作業。我們建議您執行 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。