適用於:SQL Server
本文說明如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中指定合併文章解析器。
建議
合併複製支援以下類型的文章解析器:
預設解決器。 預設解決器的行為視訂閱是客訂閱還是主訂閱而定。 欲了解更多關於指定訂閱類型的資訊,請參閱 「指定合併訂閱類型與衝突解決優先順序」。
你要寫一個自訂解析器,可以是商業邏輯處理器(用管理程式碼寫的)或是基於 COM 的自訂解析器。 欲了解更多資訊,請參閱 「進階合併複製-衝突偵測與解決」。 如果你需要為每個複製的列實作自訂邏輯,而不只是針對衝突列,請參考「 合併文章的實作商業邏輯處理器」。
一個標準的 COM 基礎解析器,隨 SQL Server 附贈。
若要使用非預設解析器的解析器,必須將解析器複製到執行 合併代理程式 的電腦並註冊。 如果你使用的是商業邏輯處理器,也必須在 Publisher 註冊。 「合併代理程式」在以下位置上執行:
推式訂閱的分發者
主動式訂閱的用戶端
Internet Information Services(IIS)伺服器,用於拉取訂閱,使用網頁同步
使用 SQL Server Management Studio
註冊解析器後,請在文章屬性-<文章>對話框的解析器標籤中指定文章應使用解析器。 你可以在新發表精靈和 出版屬性 - <出版> 對話框中進入此對話框。 欲了解更多關於精靈使用及存取對話框的資訊,請參閱 「建立出版品 」以及 「檢視與修改出版屬性」。
在 [新發行集精靈] 的 [文章] 頁面上,或是在 [出版物屬性 - 出版物<] 對話方塊中,選取一個資料表。
選擇 文章屬性,然後選擇「 高亮表格文章的屬性集合」。
在 文章屬性 - <文章> 頁面,選擇 解決器 標籤。
選擇 使用自訂解析器(註冊於發行商),然後在列表中選擇該解析器。
若解析器需要輸入(例如欄位名稱),請在 解析器文字框中的輸入資訊 中輸入。
選擇「確定」。
對每個需要解決器的文章重複此過程。
使用 Transact-SQL
如果您打算註冊您自己自訂的衝突解決器,請建立以下其中一種類型:
以 Managed 程式碼為基礎的解析器,作為業務邏輯處理常式。 如需詳細資訊,請參閱 為合併發行項實作商務邏輯處理常式。
以預存程序為基礎的解析程式以及以 COM 為基礎的解析程式。 欲了解更多資訊,請參閱 合併文章中的「實作自訂衝突解決器」。
要判斷所需的解析器是否已註冊,請在任何資料庫的Publisher執行sp_enumcustomresolvers。 此程序回傳自訂解析器的描述、每個在分發器註冊的基於 COM 的解析器的類別識別碼(CLSID),以及每個註冊於分發器管理的商業邏輯處理器的管理組裝資訊。
如果想要的自訂解析器還沒註冊,就在分發器執行 sp_registercustomresolver 。 指定一個
@article_resolver解算器的名稱。 對於商業邏輯處理器,這個名稱是集合體的友善名稱。 對於基於 COM 的解析器,請指定 DLL 的@resolver_clsidCLSID 。 對於商業邏輯處理器,指定一個值true,為@is_dotnet_assembly,集合名稱@dotnet_assembly_name,以及覆蓋 BusinessLogicModule 的@dotnet_class_name類別的全限定名稱。注意
如果你沒有在與 合併代理程式 執行檔相同的目錄中部署商業邏輯處理器組件,也沒有在與同步啟動 合併代理程式 的應用程式相同的目錄中,或是在全域組合快取(GAC)中部署,你需要指定完整路徑並以組合語言名稱來執行
@dotnet_assembly_name。如果此解決器是以 COM 為基礎的解決器:
將自訂解決器 DLL 複製到發送訂閱的散發者上,或是提取訂閱的訂閱者上。
注意
Microsoft 自訂解析器就在目錄裡
<drive>:\Program Files\Microsoft SQL Server\<nnn>\COM。請使用
regsvr32.exe該自訂解析器 DLL 與作業系統註冊。 例如,以下指令用來註冊 SQL Server 的加法衝突解決器:regsvr32 ssradd.dll
若解析器是商業邏輯處理器,請將組合語言部署於與合併代理程式執行檔相同的資料夾(replmerg.exe)、與呼叫合併代理程式的應用程式相同的資料夾,或在步驟3中指定的
@dotnet_assembly_name參數資料夾中。注意
合併代理程式 執行檔的預設安裝位置為
<drive>:\Program Files\Microsoft SQL Server\<nnn>\COM。
在定義合併發行項時,指定自訂解析程式
如果你打算使用自訂衝突解決器,請依照前述程序建立並註冊該解決器。
在Publisher執行sp_enumcustomresolvers,並在結果集欄位中註明想要的自訂解析器
value名稱。在發行者上的發行集資料庫中,執行 sp_addmergearticle。 請用參數指定第 2
@article_resolver步的解析器名稱,以及任何需要輸入的自訂解析器@resolver_info名稱。 對於基於儲存程序的自訂解析器, 是@resolver_info儲存程序的名稱。 關於 Microsoft 提供的解析器所需輸入的更多資訊,請參閱「進階合併複製衝突 - COM-Based 解析器」。
針對現有的合併發行項,指定或變更自訂解析程式
若要判斷文章是否有自訂解析器,或取得解析器的名稱,請執行 sp_helpmergearticle。 如果文章有自訂解析器,該名稱會出現在
article_resolver欄位中。 欄位resolver_info顯示輸入到解析器的任何輸入。在Publisher執行sp_enumcustomresolvers,並在結果集欄位中註明想要的自訂解析器
value名稱。在發行資料庫中的發行者上,執行 sp_changemergearticle。 指定一個值,
article_resolver包括商業邏輯處理器的完整路徑,對於@property,以及第 2 步中想要的自訂解析器的名稱。@value若要更改自訂解析器所需的任何輸入,請再次執行 sp_changemergearticle 。 指定一個值,
resolver_info@property並為自訂解析器@value指定任何必要的輸入。 對於基於儲存程序的自訂解析器, 是@resolver_info儲存程序的名稱。 欲了解更多所需輸入資訊,請參閱 進階合併複製衝突 - COM-Based 解析器。
將自訂衝突解析程式取消註冊
在Publisher執行sp_enumcustomresolvers,並在結果集欄位中記下要移除
value的自訂解析器名稱。在分銷商處,執行 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