Delen via


Een resolver voor samenvoegartikelen opgeven

van toepassing op:SQL Server-

In dit onderwerp wordt beschreven hoe u een samenvoegartikel-resolver in SQL Server opgeeft met behulp van SQL Server Management Studio of Transact-SQL.

Aanbevelingen

  • Met samenvoegreplicatie zijn de volgende typen artikel-resolvers toegestaan:

  • Als u een andere resolver dan de standaardresolver wilt gebruiken, moet u de resolver kopiëren naar de computer waarop de Samenvoegagent wordt uitgevoerd en registreren (als u een business logica-handler gebruikt, moet deze ook worden geregistreerd bij de Uitgever). De samenvoegagent wordt uitgevoerd op:

    • De distributeur voor een push-abonnement

    • De abonnee voor een pullabonnement

    • De IIS-server (Microsoft Internet Information Services) voor een pull-abonnement dat gebruikmaakt van websynchronisatie

SQL Server Management Studio gebruiken

Nadat de resolver is geregistreerd, geeft u op dat een artikel de resolver moet gebruiken op het tabblad Resolver van het dialoogvenster Artikeleigenschappen - <Artikel> , dat beschikbaar is in de wizard Nieuwe publicatie en het dialoogvenster Publicatie-eigenschappen - <Publicatie> . Zie Een publicatie maken en publicatie-eigenschappen weergeven en wijzigen voor meer informatie over het gebruik van de wizard en het openen van het dialoogvenster.

Een resolver opgeven

  1. Selecteer een tabel op de pagina Artikelen van de Wizard Nieuwe Publicatie of het dialoogvenster Publicatie-eigenschappen - <Publicatie>.

  2. Klik op Artikeleigenschappen en klik vervolgens op Eigenschappen van gemarkeerd tabelartikel instellen.

  3. Klik op het tabblad Resolver op de pagina Artikeleigenschappen - <Artikel>.

  4. Selecteer Een aangepaste resolver gebruiken (geregistreerd bij de distributeur) en klik vervolgens in de lijst op de resolver.

  5. Als voor de resolver invoer is vereist (zoals een kolomnaam), geeft u deze op in de enter-informatie die nodig is voor het tekstvak van de resolver .

  6. Kies OK.

  7. Herhaal dit proces voor elk artikel waarvoor een resolver is vereist.

Transact-SQL gebruiken

Een aangepaste conflictoplossing registreren

  1. Als u van plan bent om uw eigen aangepaste conflictoplossing te registreren, maakt u een van de volgende typen:

  2. Als u wilt bepalen of de gewenste resolver al is geregistreerd, voert u sp_enumcustomresolvers (Transact-SQL) uit bij publisher in een willekeurige database. Hiermee wordt een beschrijving weergegeven van de aangepaste resolver en de klasse-id (CLSID) voor elke COM-gebaseerde resolver die is geregistreerd bij de Distributeur of informatie over de beheerde assembly voor elke zakelijke logische handler die is geregistreerd bij de Distributeur.

  3. Als de gewenste aangepaste resolver nog niet is geregistreerd, voert u sp_registercustomresolver (Transact-SQL) uit bij de Distributeur. Geef een naam op voor de resolver voor @article_resolver; voor een business logic handler is dit de vriendelijke naam van de assembly. Geef voor op COM gebaseerde resolvers de CLSID van het DLL-bestand op voor @resolver_clsid en geef voor een business logic handler een waarde op van true voor @is_dotnet_assembly, de naam van de assembly voor @dotnet_assembly_name en de volledig gekwalificeerde naam van de klasse die voor @dotnet_class_name overschrijftBusinessLogicModule.

    Opmerking

    Als een assembly voor de bedrijfslogica-handler niet is geïmplementeerd in dezelfde map als het uitvoerbare bestand van de samenvoegagent, niet in dezelfde map als de toepassing die de samenvoegagent synchroon start, of niet in de globale assemblycache (GAC), moet u het volledige pad met de assemblynaam opgeven voor @dotnet_assembly_name.

  4. Als de resolver een COM-resolver is:

    • Kopieer de aangepaste resolver-DLL naar de distributeur voor pushabonnementen of naar de abonnee voor pull-abonnementen.

      Opmerking

      Aangepaste resolvers van Microsoft vindt u in de < map drive>:\Program Files\Microsoft SQL Server\nnn\COM.

    • Gebruik regsvr32.exe om de DLL van de aangepaste resolver te registreren bij het besturingssysteem. Als u bijvoorbeeld het volgende uitvoert vanaf de opdrachtprompt, wordt de SQL Server Additive Conflict Resolver geregistreerd:

      regsvr32 ssradd.dll  
      
  5. Als de resolver een handler voor bedrijfslogica is, implementeert u de assembly in dezelfde map als het uitvoerbare bestand van de samenvoegagent (replmerg.exe), in dezelfde map als een toepassing die de samenvoegagent aanroept, of in de map die is opgegeven voor de parameter @dotnet_assembly_name in stap 3.

    Opmerking

    De standaardinstallatielocatie van het uitvoerbare bestand Merge Agent is <station>:\Program Files\Microsoft SQL Server\nnn\COM.

Een aangepaste resolver opgeven bij het definiëren van een samenvoegartikel

  1. Als u van plan bent een aangepaste conflictoplossing te gebruiken, maakt en registreert u de resolver met behulp van de bovenstaande procedure.

  2. Voer in Publisher sp_enumcustomresolvers (Transact-SQL) uit en noteer de naam van de gewenste aangepaste resolver in het waardeveld van de resultatenset.

  3. Voer in Publisher in de publicatiedatabase sp_addmergearticle (Transact-SQL) uit. Geef de naam op van de resolver uit stap 2 voor @article_resolver en eventuele vereiste invoer voor de aangepaste resolver met behulp van de parameter @resolver_info . Voor opgeslagen op procedure gebaseerde aangepaste resolvers is @resolver_info de naam van de opgeslagen procedure. Zie Microsoft COM-Based Resolvers voor meer informatie over vereiste invoer voor door Microsoft geleverde resolvers.

Een aangepaste resolver opgeven of wijzigen voor een bestaand samenvoegartikel

  1. Als u wilt bepalen of een aangepaste resolver is gedefinieerd voor een artikel of om de naam van de resolver op te halen, voert u sp_helpmergearticle (Transact-SQL) uit. Als er een aangepaste resolver is gedefinieerd voor het artikel, wordt de naam ervan weergegeven in het veld article_resolver . Alle invoer die aan de resolver wordt geleverd, wordt weergegeven in het resolver_info veld van de resultatenset.

  2. Voer in Publisher sp_enumcustomresolvers (Transact-SQL) uit en noteer de naam van de gewenste aangepaste resolver in het waardeveld van de resultatenset.

  3. Voer in Publisher in de publicatiedatabase sp_changemergearticle (Transact-SQL) uit. Geef een waarde op van article_resolver, inclusief het volledige pad voor zakelijke logische handlers, voor @property en de naam van de gewenste aangepaste resolver uit stap 2 voor @value.

  4. Als u de vereiste invoer voor de aangepaste resolver wilt wijzigen, voert u sp_changemergearticle (Transact-SQL) opnieuw uit. Geef een waarde op van resolver_info voor @property en eventuele vereiste invoer voor de aangepaste resolver voor @value. Voor opgeslagen op procedure gebaseerde aangepaste resolvers is @resolver_info de naam van de opgeslagen procedure. Zie Microsoft COM-Based Resolvers voor meer informatie over vereiste invoer.

Registratie van een aangepaste conflictoplossing ongedaan maken

  1. Voer in Publisher sp_enumcustomresolvers (Transact-SQL) uit en noteer de naam van de aangepaste resolver die u wilt verwijderen in het waardeveld van de resultatenset.

  2. Voer sp_unregistercustomresolver (Transact-SQL) uit bij de Distributeur. Geef de volledige naam van de aangepaste resolver op uit stap 1 voor @article_resolver.

Voorbeelden (Transact-SQL)

In dit voorbeeld wordt een nieuw artikel gemaakt en wordt aangegeven dat de SQL Server-gemiddelde conflictoplossing wordt gebruikt om het gemiddelde van de kolom Prijs per eenheid te berekenen wanneer er conflicten optreden.

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

In dit voorbeeld wordt een artikel gewijzigd om het gebruik van de SQL Server Additieve Conflict Resolver te specificeren en de som van de kolom UnitsOnOrder te berekenen wanneer er conflicten optreden.

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