共用方式為


指定合併發行項解析程式

本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,在 SQL Server 2012 中指定合併發行項解析程式。

本主題內容

  • 開始之前:

    建議

  • 若要指定合併發行項解析程式,請使用:

    SQL Server Management Studio

    Transact-SQL

開始之前

建議

  • 合併式複寫允許下列類型的發行項解決器:

  • 若要使用預設解決器以外的其他解決器,您必須將解決器複製到執行「合併代理程式」的電腦,然後註冊它 (如果您使用的是商務邏輯處理常式,則還必須在「發行者」端對其進行註冊)。 「合併代理程式」在以下位置上執行:

    • 發送訂閱的「散發者」端

    • 提取訂閱的「訂閱者」端

    • 使用 Web 同步處理來提取訂閱的 Microsoft Internet Information Services (IIS)

搭配回到頁首連結使用的箭頭圖示[Top]

使用 SQL Server Management Studio

註冊解決器後,在 [發行項屬性 - <Article>] 對話方塊的 [解決器] 索引標籤中指定應使用解決器的發行項,在「新增發行集精靈」和 [發行集屬性 - <Publication>] 對話方塊中可用。 如需有關使用此精靈及存取此對話方塊的詳細資訊,請參閱<建立發行集>和<檢視及修改發行集屬性>。

若要指定解決器

  1. 在新增發行集精靈的 [發行項] 頁面,或者在 [發行集屬性 - <Publication>] 對話方塊中,選取一個資料表。

  2. 按一下 [發行項屬性],然後按一下 [設定反白顯示資料表發行項的屬性]

  3. [發行項屬性 - <Article>] 頁面中,按一下 [解決器] 索引標籤。

  4. 選取 [使用自訂解決器 (已在散發者註冊)],然後在清單中按一下解決器。

  5. 如果解決器需要輸入 (例如資料行名稱),請在 [輸入解決器所需的資訊] 文字方塊中指定它。

  6. 按一下 [確定]。

  7. 對於每個需要解決器的發行項重複此處理。

搭配回到頁首連結使用的箭頭圖示[Top]

使用 Transact-SQL

註冊自訂衝突解決器

  1. 如果您打算註冊您自己自訂的衝突解決器,請建立以下其中一種類型:

  2. 若要判斷是否已經註冊想要的解決器,請在任何資料庫的發行者上執行 sp_enumcustomresolvers (Transact-SQL)。 這樣會顯示自訂解決器的描述以及在散發者上註冊之每一個以 COM 為基礎之解決器的類別識別碼 (CLSID),或是在散發者上註冊之每一個商務邏輯處理常式的 Managed 組件相關資訊。

  3. 如果所要的自訂衝突解決器尚未註冊,請執行 sp_registercustomresolver (Transact-SQL)。 針對 @article_resolver 指定解決器名稱;對於商務邏輯處理常式而言,這是組件的易記名稱。 對於以 COM 為基礎的解決器而言,請將 @resolver_clsid 指定為 DLL 的 CLSID,然後針對商務邏輯處理常式,將 @is_dotnet_assembly 指定為 true 的值、將 @dotnet_assembly_name 指定為組件的名稱,並將 @dotnet_class_name 指定為覆寫 BusinessLogicModule 之類別的完整名稱。

    [!附註]

    如果商務邏輯處理常式組件未部署在與合併代理程式可執行檔相同的目錄中、與同步啟動合併代理程式之應用程式相同的目錄中,或是全域組件快取 (GAC) 中,您就必須將 @dotnet_assembly_name 指定為包含組件名稱的完整路徑。

  4. 如果此解決器是以 COM 為基礎的解決器:

    • 將自訂解決器 DLL 複製到發送訂閱的散發者上,或是提取訂閱的訂閱者上。

      [!附註]

      可以在 C:\Program Files\Microsoft SQL Server\110\COM 目錄中找到 Microsoft 自訂解決器。

    • 使用 regsvr32.exe 向作業系統註冊自訂解決器 DLL。 例如,從命令提示字元執行以下命令可註冊 SQL Server Additive Conflict Resolver:

      regsvr32 ssradd.dll
      
  5. 如果此解決器是商務邏輯處理常式,請將組件部署在與合併代理程式可執行檔 (replmerg.exe) 相同的資料夾中、與叫用合併代理程式之應用程式相同的資料夾中,或是針對步驟 3 中 @dotnet_assembly_name 參數指定的資料夾中。

    [!附註]

    合併代理程式可執行檔的預設安裝位置為 C:\Program Files\Microsoft SQL Server\110\COM。

在定義合併發行項時,指定自訂解決器

  1. 如果您打算使用自訂衝突解決器,請使用以上的程序建立及註冊解決器。

  2. 在發行者上,執行 sp_enumcustomresolvers (Transact-SQL),並記下結果集中 value 欄位內所需的自訂解決器名稱。

  3. 在發行集資料庫的發行者上,執行 sp_addmergearticle (Transact-SQL)。 針對 @article_resolver 指定步驟 2 中的解決器名稱,並使用 @resolver_info 參數指定自訂解決器的任何必要輸入。 如果是以預存程序為基礎的自訂解決器,@resolver_info 會是預存程序的名稱。 如需有關 Microsoft 提供之解決器所需輸入的詳細資訊,請參閱<以 COM 為基礎的 Microsoft 解析程式>。

針對現有的合併發行項指定或變更自訂解決器

  1. 若要判斷是否已針對發行項定義自訂解決器,或是要取得解決器的名稱,請執行 sp_helpmergearticle (Transact-SQL)。 如果已針對發行項定義自訂解決器,它的名稱會顯示在 article_resolver 欄位中。 為解決器提供的任何輸入都會顯示在結果集的 resolver_info 欄位中。

  2. 在發行者上,執行 sp_enumcustomresolvers (Transact-SQL),並記下結果集中 value 欄位內所需的自訂解決器名稱。

  3. 在發行集資料庫的發行者上,執行 sp_changemergearticle (Transact-SQL)。 針對 @property 指定 article_resolver 的值,包括商務邏輯處理常式的完整路徑,並針對 @value 指定步驟 2 中所需的自訂解決器名稱。

  4. 若要變更自訂解決器的任何必要輸入,請再次執行 sp_changemergearticle (Transact-SQL)。 針對 @property 指定 resolver_info 的值,並針對 @value 指定自訂解決器的任何必要輸入。 如果是以預存程序為基礎的自訂解決器,@resolver_info 會是預存程序的名稱。 如需有關必要輸入的詳細資訊,請參閱<以 COM 為基礎的 Microsoft 解析程式>。

取消註冊自訂衝突解決器

  1. 在發行者上,執行 sp_enumcustomresolvers (Transact-SQL),並記下結果集中 value 欄位內要移除的自訂解決器名稱。

  2. 在散發者端執行 sp_unregistercustomresolver (Transact-SQL)。 針對 @article_resolver 指定步驟 1 中自訂解決器的完整名稱。

範例 (Transact-SQL)

此範例會建立新的發行項,並指定在發生衝突時,應該使用 SQL Server Averaging Conflict Resolver 來計算 UnitPrice 資料行的平均值。

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_object = @article, 
    @article_resolver = 'Microsoft SQL Server Averaging Conflict Resolver', 
    @resolver_info = 'UnitPrice';
GO

這個範例會變更要指定的發行項,其方式是在發生衝突時使用 SQL Server Additive Conflict Resolver 計算 UnitsOnOrder 資料行的總和。

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = 'AdvWorksSalesOrdersMerge';
SET @article = 'Products';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='article_resolver', 
    @value='Microsoft SQL Server Additive Conflict Resolver';

EXEC sp_changemergearticle 
    @publication = @publication, 
    @article = @article, 
    @property='resolver_info', 
    @value='UnitsOnOrder';
GO

搭配回到頁首連結使用的箭頭圖示[Top]

請參閱

概念

進階合併式複寫衝突偵測與解決

為合併發行項實作商務邏輯處理常式