指定合併文章解析器

適用於:SQL Server

本文說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中指定合併文章解析器。

建議

  • 合併複製支援以下類型的文章解析器:

  • 若要使用非預設解析器的解析器,必須將解析器複製到執行 合併代理程式 的電腦並註冊。 如果你使用的是商業邏輯處理器,也必須在 Publisher 註冊。 「合併代理程式」在以下位置上執行:

    • 推式訂閱的分發者

    • 主動式訂閱的用戶端

    • Internet Information Services(IIS)伺服器,用於拉取訂閱,使用網頁同步

使用 SQL Server Management Studio

註冊解析器後,請在文章屬性-<文章>對話框的解析器標籤中指定文章應使用解析器。 你可以在新發表精靈和 出版屬性 - <出版> 對話框中進入此對話框。 欲了解更多關於精靈使用及存取對話框的資訊,請參閱 「建立出版品 」以及 「檢視與修改出版屬性」。

  1. 在 [新發行集精靈] 的 [文章] 頁面上,或是在 [出版物屬性 - 出版物<] 對話方塊中,選取一個資料表。

  2. 選擇 文章屬性,然後選擇「 高亮表格文章的屬性集合」。

  3. 在 文章屬性 - <文章> 頁面,選擇 解決器 標籤。

  4. 選擇 使用自訂解析器(註冊於發行商),然後在列表中選擇該解析器。

  5. 若解析器需要輸入(例如欄位名稱),請在 解析器文字框中的輸入資訊 中輸入。

  6. 選擇「確定」。

  7. 對每個需要解決器的文章重複此過程。

使用 Transact-SQL

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

  2. 要判斷所需的解析器是否已註冊,請在任何資料庫的Publisher執行sp_enumcustomresolvers。 此程序回傳自訂解析器的描述、每個在分發器註冊的基於 COM 的解析器的類別識別碼(CLSID),以及每個註冊於分發器管理的商業邏輯處理器的管理組裝資訊。

  3. 如果想要的自訂解析器還沒註冊,就在分發器執行 sp_registercustomresolver 。 指定一個 @article_resolver解算器的名稱。 對於商業邏輯處理器,這個名稱是集合體的友善名稱。 對於基於 COM 的解析器,請指定 DLL 的 @resolver_clsidCLSID 。 對於商業邏輯處理器,指定一個值 true ,為 @is_dotnet_assembly,集合名稱 @dotnet_assembly_name,以及覆蓋 BusinessLogicModule 的 @dotnet_class_name類別的全限定名稱。

    注意

    如果你沒有在與 合併代理程式 執行檔相同的目錄中部署商業邏輯處理器組件,也沒有在與同步啟動 合併代理程式 的應用程式相同的目錄中,或是在全域組合快取(GAC)中部署,你需要指定完整路徑並以組合語言名稱來執行@dotnet_assembly_name。

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

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

      注意

      Microsoft 自訂解析器就在目錄裡<drive>:\Program Files\Microsoft SQL Server\<nnn>\COM。

    • 請使用 regsvr32.exe 該自訂解析器 DLL 與作業系統註冊。 例如,以下指令用來註冊 SQL Server 的加法衝突解決器:

      regsvr32 ssradd.dll
      
  5. 若解析器是商業邏輯處理器,請將組合語言部署於與合併代理程式執行檔相同的資料夾(replmerg.exe)、與呼叫合併代理程式的應用程式相同的資料夾,或在步驟3中指定的@dotnet_assembly_name參數資料夾中。

    注意

    合併代理程式 執行檔的預設安裝位置為 <drive>:\Program Files\Microsoft SQL Server\<nnn>\COM。

在定義合併發行項時,指定自訂解析程式

  1. 如果你打算使用自訂衝突解決器,請依照前述程序建立並註冊該解決器。

  2. 在Publisher執行sp_enumcustomresolvers,並在結果集欄位中註明想要的自訂解析器value名稱。

  3. 在發行者上的發行集資料庫中,執行 sp_addmergearticle。 請用參數指定第 2 @article_resolver 步的解析器名稱,以及任何需要輸入的自訂解析器 @resolver_info 名稱。 對於基於儲存程序的自訂解析器, 是 @resolver_info 儲存程序的名稱。 關於 Microsoft 提供的解析器所需輸入的更多資訊,請參閱「進階合併複製衝突 - COM-Based 解析器」。

針對現有的合併發行項,指定或變更自訂解析程式

  1. 若要判斷文章是否有自訂解析器,或取得解析器的名稱,請執行 sp_helpmergearticle。 如果文章有自訂解析器,該名稱會出現在 article_resolver 欄位中。 欄位 resolver_info 顯示輸入到解析器的任何輸入。

  2. 在Publisher執行sp_enumcustomresolvers,並在結果集欄位中註明想要的自訂解析器value名稱。

  3. 在發行資料庫中的發行者上,執行 sp_changemergearticle。 指定一個值,article_resolver包括商業邏輯處理器的完整路徑,對於 @property,以及第 2 步中想要的自訂解析器的名稱。@value

  4. 若要更改自訂解析器所需的任何輸入,請再次執行 sp_changemergearticle 。 指定一個值,resolver_info@property並為自訂解析器@value指定任何必要的輸入。 對於基於儲存程序的自訂解析器, 是 @resolver_info 儲存程序的名稱。 欲了解更多所需輸入資訊,請參閱 進階合併複製衝突 - COM-Based 解析器。

將自訂衝突解析程式取消註冊

  1. 在Publisher執行sp_enumcustomresolvers,並在結果集欄位中記下要移除value的自訂解析器名稱。

  2. 在分銷商處,執行 sp_unregistercustomresolver。 請指定第一步自訂解析器的全名。@article_resolver

範例 (Transact-SQL)

此範例建立新文章,並指定使用 SQL Server 平均衝突解決器計算衝突發生時欄位的平均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 加法衝突解決器來計算衝突發生時欄位的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