Dela via


Ange en lösare för sammanslagningsartikel

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:

  • 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

  1. På sidan Artiklar i guiden Ny publikation eller dialogrutan Publikationsegenskaper – <publikation> väljer du en tabell.

  2. Klicka på Artikelegenskaper och sedan på Ange egenskaper för markerad tabellartikel.

  3. På sidan Artikelegenskaper – <artikel> klickar du på fliken Lösare .

  4. Välj Använd en anpassad lösare (registrerad hos distributören) och klicka sedan på lösaren i listan.

  5. Om matcharen kräver indata (till exempel ett kolumnnamn) anger du den i textrutan Ange information som behövs av matcharen .

  6. Välj OK.

  7. Upprepa den här processen för varje artikel som kräver en lösning.

Använda Transact-SQL

Registrera en anpassad konfliktlösare

  1. Om du planerar att registrera en egen anpassad konfliktlösare skapar du någon av följande typer:

  2. 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.

  3. 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.

  4. 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  
      
  5. 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

  1. Om du planerar att använda en anpassad konfliktlösare skapar och registrerar du lösaren med hjälp av proceduren ovan.

  2. I Publisher kör du sp_enumcustomresolvers (Transact-SQL) och noterar namnet på den önskade anpassade matcharen i värdefältet i resultatuppsättningen.

  3. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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

  1. 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.

  2. 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