sp_addmergesubscription (Transact-SQL)

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

主題連結圖示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'AdventureWorks2008R2Replica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks2008R2]
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