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 註冊訂閱,且不需要啟動 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。重要事項 基於效能的考量,我們建議您不要在參數化資料列篩選器子句中,將函數套用至資料行名稱上,如 LEFT([MyColumn]) = SUSER_SNAME()。 如果您在篩選子句中使用 HOST_NAME,且置換了 HOST_NAME 值,您可能需要利用 CONVERT 來轉換資料類型。 如需有關這個情況最佳做法的詳細資訊,請參閱<參數化資料列篩選器>主題中的「覆寫 HOST_NAME() 值」一節。
傳回碼值
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 [AdventureWorks2012];
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。
請參閱
參考
sp_changemergesubscription (Transact-SQL)
sp_dropmergesubscription (Transact-SQL)
sp_helpmergesubscription (Transact-SQL)