sp_addmergesubscription (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

建立推送或提取合併訂閱。 這個預存程式會在發行集資料庫的發行者端執行。

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),而且可以是下列其中一個值。

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
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 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 Synchronization Manager 同步處理訂閱。 @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