sp_addmergesubscription (Transact-SQL)
適用於:SQL Server Azure 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),而且可以是下列其中一個值。
值 | Description |
---|---|
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,而且可以是下列其中一個值。
值 | Description |
---|---|
1 |
一次 |
4 |
每日 |
8 |
每週 |
10 |
每月 |
20 |
每月,相對於頻率間隔 |
40 |
當 SQL Server Agent 啟動時 |
NULL (預設值) |
[ @frequency_interval = ] frequency_interval
合併代理程式 執行的日期或天數。 @frequency_interval 為 int,而且可以是下列其中一個值。
值 | Description |
---|---|
1 |
星期日 |
2 |
星期一 |
3 |
Tuesday |
4 |
星期三 |
5 |
Thursday |
6 |
星期五 |
7 |
星期六 |
8 |
Day |
9 |
平日 |
10 |
週末日 |
NULL (預設值) |
[ @frequency_relative_interval = ] frequency_relative_interval
每個月頻率間隔的排程合併出現次數。 @frequency_relative_interval為 int,而且可以是下列其中一個值。
值 | Description |
---|---|
1 |
第一個 |
2 |
Second |
4 |
Third |
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,而且可以是下列其中一個值。
值 | Description |
---|---|
1 |
一次 |
2 |
第二個 |
4 |
Minute |
8 |
Hour |
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'
指定是否可以透過 windows Synchronization Manager Microsoft同步處理訂閱。 @enabled_for_syncmgr為 nvarchar(5),預設值為 false
。
- 如果
false
為 ,則訂閱未向 Synchronization Manager 註冊。 - 如果
true
為 ,則訂閱會向 Synchronization Manager 註冊,而且不需要啟動 SQL Server Management Studio 即可進行同步處理。
[ @offloadagent = ] offloadagent
指定可以從遠端啟動代理程式。 @offloadagent為 bit,預設值為 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
用於合併式複寫。
當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 [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
權限
只有系統管理員固定伺服器角色或db_owner固定資料庫角色的成員才能執行 sp_addmergesubscription
。