Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Det här avsnittet beskriver hur du anger en sammanslagningsartikelslösare i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL.
Rekommendationer
Sammanslagningsreplikering tillåter följande typer av artikelupplösare:
Standardresolvern. Beteendet för standardlösningen beror på om prenumerationen är en klientprenumeration eller en serverprenumeration. Mer information om hur du anger prenumerationstyp finns i Ange en kopplingsprenumerationstyp och konfliktlösningsprioritet (SQL Server Management Studio).
En anpassad lösning som du har skrivit, som kan vara en affärslogikhanterare (skriven i hanterad kod) eller en anpassad COM-baserad lösning. För mer information, se Advanced Merge Replication Conflict Detection and Resolution (Avancerad identifiering och lösning av replikeringskonflikter). Om du behöver implementera anpassad logik som körs för varje replikerad rad, inte bara för rader i konflikt, kan du läsa Artikeln Implementera en affärslogikhanterare för en sammanslagning.
En COM-baserad standardlösare som ingår i Microsoft SQL Server.
Om du vill använda en annan matchare än standardlösaren måste du kopiera matcharen till datorn där Sammanslagningsagenten körs och registrera den (om du använder en affärslogikhanterare måste den också vara registrerad i Publisher). Sammanslagningsagenten körs på:
Distributören för en push-prenumeration
Prenumeranten för en pull-prenumeration
Microsoft Internet Information Services-servern (IIS) för en pull-prenumeration som använder webbsynkronisering
Använda SQL Server Management Studio
När resolvern har registrerats anger du att en artikel ska använda resolvern på fliken Resolver i dialogrutan Artikelns egenskaper – <Artikel>, som är tillgänglig i guiden för ny publikation och dialogrutan Publikationens egenskaper – <Publikation>. Mer information om hur du använder guiden och hur du öppnar dialogrutan finns i Skapa en publikation och visa och ändra publikationsegenskaper.
Så här anger du en lösare
På sidan Artiklar i guiden Ny publikation eller dialogrutan Publikationsegenskaper – <publikation> väljer du en tabell.
Klicka på Artikelegenskaper och sedan på Ange egenskaper för markerad tabellartikel.
På sidan Artikelegenskaper – <artikel> klickar du på fliken Lösare .
Välj Använd en anpassad lösare (registrerad hos distributören) och klicka sedan på lösaren i listan.
Om matcharen kräver indata (till exempel ett kolumnnamn) anger du den i textrutan Ange information som behövs av matcharen .
Välj OK.
Upprepa den här processen för varje artikel som kräver en lösning.
Använda Transact-SQL
Registrera en anpassad konfliktlösare
Om du planerar att registrera en egen anpassad konfliktlösare skapar du någon av följande typer:
Hanterad kodbaserad lösare som affärslogikhanterare. Mer information finns i Implementera en affärslogikhanterare för en sammanslagningsartikel.
Lagrad procedur-baserad lösare och COM-baserad lösare. Mer information finns i Implementera en anpassad konfliktlösare för en sammanslagningsartikel.
För att avgöra om den önskade lösaren redan är registrerad, kör sp_enumcustomresolvers (Transact-SQL) på Publisher i valfri databas. Detta visar en beskrivning av den anpassade upplösaren samt klassidentifieraren (CLSID) för varje COM-baserad upplösare som registrerats hos distributören, eller information om det hanterade assemblyt för varje affärslogikhanterare som registrerats hos distributören.
Om den önskade anpassade lösaren inte redan är registrerad, kör sp_registercustomresolver (Transact-SQL) på distributören. Ange ett namn för lösaren för @article_resolver; för en affärslogikhanterare är detta det beskrivande namnet på sammansättningen. För COM-baserade lösningar anger du CLSID för DLL för @resolver_clsid och för en hanterare för affärslogik anger du värdet true för @is_dotnet_assembly, namnet på komponenten för @dotnet_assembly_name och det fullständigt kvalificerade namnet på den klass som åsidosätter BusinessLogicModule för @dotnet_class_name.
Anmärkning
Om en affärslogikhanterarsammansättning inte distribueras i samma katalog som den körbara filen Merge Agent i samma katalog som programmet som synkront startar sammanslagningsagenten eller i den globala sammansättningscache (GAC) måste du ange den fullständiga sökvägen med sammansättningsnamnet för @dotnet_assembly_name.
Om resolvern är en COM-baserad resolver:
Kopiera den anpassade resolver-DLL-filen till distributören för pushprenumerationer eller till prenumeranten för pullprenumerationer.
Anmärkning
Microsofts anpassade matchare finns i <katalogen drive>:\Program Files\Microsoft SQL Server\nnn\COM.
Använd regsvr32.exe för att registrera DLL:en för den anpassade matcharen med operativsystemet. Om du till exempel kör följande från kommandotolken registreras SQL Server Additive Conflict Resolver:
regsvr32 ssradd.dll
Om matcharen är en affärslogikhanterare distribuerar du sammansättningen i samma mapp som den körbara filen Merge Agent (replmerg.exe), i samma mapp som ett program som anropar sammanslagningsagenten eller i den mapp som anges för parametern @dotnet_assembly_name i steg 3.
Anmärkning
Standardinstallationsplatsen för den körbara filen Merge Agent är <drive>:\Program Files\Microsoft SQL Server\nnn\COM.
Ange en anpassad lösning när du definierar en sammanslagningsartikel
Om du planerar att använda en anpassad konfliktlösare skapar och registrerar du lösaren med hjälp av proceduren ovan.
I Publisher kör du sp_enumcustomresolvers (Transact-SQL) och noterar namnet på den önskade anpassade matcharen i värdefältet i resultatuppsättningen.
Kör sp_addmergearticle (Transact-SQL)i Publisher på publikationsdatabasen. Ange namnet på matcharen från steg 2 för @article_resolver och eventuella nödvändiga indata till den anpassade matcharen med hjälp av parametern @resolver_info . För anpassade matchare baserade på lagrade procedurer, är @resolver_info namnet på den lagrade proceduren. Mer information om nödvändiga indata för lösare som tillhandahålls av Microsoft finns i Microsoft COM-Based Resolvers.
Ange eller ändra en anpassad lösare för en befintlig sammanfogningsartikel
Om du vill ta reda på om en anpassad lösare har definierats för en artikel, eller för att hämta namnet på lösaren, kör sp_helpmergearticle (Transact-SQL). Om det finns en anpassad matchare som definierats för artikeln visas dess namn i fältet article_resolver . Alla indata som skickas till matcharen visas i fältet resolver_info i resultatuppsättningen.
Vid Publisher kör du sp_enumcustomresolvers (Transact-SQL) och noterar namnet på den önskade anpassade lösaren i fältet för värdet i resultatuppsättningen.
Kör sp_changemergearticle (Transact-SQL) på publikationsdatabasen hos Publisher. Ange ett värde för article_resolver, inklusive den fullständiga sökvägen för affärslogikhanterare, för @property och namnet på den önskade anpassade lösaren från steg 2 för @value.
För att ändra ett nödvändigt indata för den anpassade lösaren, kör sp_changemergearticle (Transact-SQL) igen. Ange värdet resolver_info för @property och eventuella nödvändiga indata till den anpassade matcharen för @value. För lagrade procedurbaserade anpassade lösare är @resolver_info namnet på den lagrade proceduren. Mer information om nödvändiga indata finns i Microsoft COM-Based Resolveers.
Avregistrera en anpassad konfliktlösare
Hos Publisher kör sp_enumcustomresolvers (Transact-SQL) och notera namnet på den anpassade lösare du vill ta bort i fältet för värde i resultatsetet.
Kör sp_unregistercustomresolver (Transact-SQL) på distributören. Ange det fullständiga namnet på den anpassade lösaren från steg 1 för @article_resolver.
Exempel (Transact-SQL)
Det här exemplet skapar en ny artikel och anger att SQL Server Averageing Conflict Resolver ska användas för att beräkna medelvärdet av kolumnen UnitPrice när konflikter uppstår.
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
I det här exemplet ändras en artikel för att specificera användningen av SQL Server Additive Conflict Resolver för att beräkna summan av kolumnen UnitsOnOrder när konflikter uppstår.
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