Impostazione di un sistema di risoluzione dei conflitti dell'articolo di mergeSpecify a Merge Article Resolver

In questo argomento viene descritto come specificare un sistema di risoluzione dell'articolo di merge in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to specify a merge article resolver in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

Contenuto dell'argomentoIn This Topic

Prima di iniziare Before You Begin

Indicazioni Recommendations

  • La replica di tipo merge consente i tipi di sistemi di risoluzione dei conflitti dell'articolo indicati di seguito:Merge replication allows the following types of article resolvers:

  • Per utilizzare un sistema di risoluzione dei conflitti diverso da quello predefinito, è necessario copiare il sistema desiderato nel computer in cui è in esecuzione l'agente di merge e registrarlo. Se si utilizza un gestore della logica di business, è necessario eseguire la registrazione anche nel server di pubblicazione.To use a resolver other than the default resolver, you must copy the resolver to the computer on which the Merge Agent runs and register it (if you are using a business logic handler, it must also be registered at the Publisher). L'agente di merge viene eseguito nei sistemi seguenti:The Merge Agent runs at:

    • Server di distribuzione per una sottoscrizione pushThe Distributor for a push subscription

    • Sottoscrittore per una sottoscrizione pullThe Subscriber for a pull subscription

    • Server MicrosoftMicrosoft Internet Information Services (IIS) per una sottoscrizione pull che utilizza la sincronizzazione WebThe MicrosoftMicrosoft Internet Information Services (IIS) server for a pull subscription that uses Web synchronization

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

In seguito alla registrazione del sistema di risoluzione dei conflitti, specificare che è necessario che un articolo usi il sistema nella scheda Sistema di risoluzione della finestra di dialogo Proprietà articolo - <Articolo>, disponibile nella Creazione guidata nuova pubblicazione e nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione>.After the resolver is registered, specify that an article should use the resolver on the Resolver tab of the Article Properties - <Article> dialog box, which is available in the New Publication Wizard and the Publication Properties - <Publication> dialog box. Per altre informazioni sull'uso della creazione guidata e l'accesso alla finestra di dialogo, vedere Creare una pubblicazione e Visualizzare e modificare le proprietà della pubblicazione.For more information about using the wizard and accessing the dialog box, see Create a Publication and View and Modify Publication Properties.

Per specificare un sistema di risoluzione dei conflittiTo specify a resolver

  1. Selezionare una tabella nella pagina Articoli della Creazione guidata nuova pubblicazione o nella finestra di dialogo Proprietà pubblicazione - <Pubblicazione>.On the Articles page of the New Publication Wizard or the Publication Properties - <Publication> dialog box, select a table.

  2. Fare clic su Proprietà articoloe quindi su Imposta proprietà dell'articolo di tabella evidenziato.Click Article Properties, and then click Set Properties of Highlighted Table Article.

  3. Nella pagina Proprietà articolo - <Articolo> fare clic sulla scheda Sistema di risoluzione.On the Article Properties - <Article> page, click the Resolver tab.

  4. Selezionare Usa un sistema di risoluzione personalizzato (registrato nel server di distribuzione)e quindi fare clic sul sistema di risoluzione nell'elenco.Select Use a custom resolver (registered at the Distributor), and then in the list, click the resolver.

  5. Se il sistema di risoluzione dei conflitti richiede un input, ad esempio un nome di colonna, specificarlo nella casella di testo Immettere le informazioni necessarie per il sistema di risoluzione .If the resolver requires input (such as a column name), specify it in the Enter information needed by the resolver text box.

  6. Fare clic su OK.Click OK.

  7. Ripetere questa procedura per ogni articolo che richiede un sistema di risoluzione dei conflitti.Repeat this process for each article that requires a resolver.

Utilizzo di Transact-SQL Using Transact-SQL

Per registrare un sistema di risoluzione dei conflitti personalizzatoTo register a custom conflict resolver

  1. Se si intende registrare un sistema di risoluzione dei conflitti personalizzato, creare uno dei tipi seguenti:If you plan to register your own custom conflict resolver, create one of the following types:

  2. Per determinare se il sistema di risoluzione desiderato è già registrato, eseguire sp_enumcustomresolvers (Transact-SQL) in qualsiasi database nel server di pubblicazione.To determine if the desired resolver is already registered, execute sp_enumcustomresolvers (Transact-SQL) at the Publisher on any database. Verrà visualizzata una descrizione del sistema di risoluzione personalizzato, nonché l'identificatore di classe (CLSID) di ogni sistema di risoluzione basato su COM registrato nel server di distribuzione oppure informazioni sull'assembly gestito per ogni gestore della logica di business registrato nel server di distribuzione.This displays a description of the custom resolver as well as the class identifier (CLSID) for each COM-based resolver registered at the Distributor or information on the managed assembly for each business logic handler registered at the Distributor.

  3. Se il sistema di risoluzione desiderato non è già registrato, eseguire sp_registercustomresolver (Transact-SQL) nel database di distribuzione.If the desired custom resolver is not already registered, execute sp_registercustomresolver (Transact-SQL) at the Distributor. Specificare un nome per il sistema di risoluzione per @article_resolver. Nel caso di un gestore della logica di business, si tratta del nome descrittivo dell'assembly.Specify a name for the resolver for @article_resolver; for a business logic handler, this is the friendly name of the assembly. Per i sistemi di risoluzione basati su COM, specificare il CLSID della DLL per @resolver_clsid, mentre per un gestore della logica di business specificare il valore true per @is_dotnet_assembly, il nome dell'assembly per @dotnet_assembly_name e il nome completo della classe che sostituisce BusinessLogicModule per @dotnet_class_name.For COM-based resolvers, specify the CLSID of the DLL for @resolver_clsid, and for a business logic handler, specify a value of true for @is_dotnet_assembly, the name of the assembly for @dotnet_assembly_name, and the fully-qualified name of the class that overrides BusinessLogicModule for @dotnet_class_name.

    Nota

    Se un assembly del gestore della logica di business non viene distribuito nella stessa directory del file eseguibile dell'agente di merge, è necessario specificare il percorso completo indicando il nome dell'assembly per @dotnet_assembly_name.If a business logic handler assembly is not deployed in the same directory as the Merge Agent executable, in the same directory as the application that synchronously starts the Merge Agent, or in the global assembly cache (GAC), you need to specify the full path with the assembly name for @dotnet_assembly_name.

  4. Se il sistema di risoluzione è basato su COM:If the resolver is a COM-based resolver:

    • Copiare la DLL del sistema di risoluzione personalizzato nel server di distribuzione per le sottoscrizioni push o nel Sottoscrittore per le sottoscrizioni pull.Copy the custom resolver DLL to the Distributor for push subscriptions or to the Subscriber for pull subscriptions.

      Nota

      I sistemi di risoluzione personalizzati MicrosoftMicrosoft sono disponibili nella directory C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM.COM directory.

    • Utilizzare regsvr32.exe per registrare la DLL del sistema di risoluzione personalizzato con il sistema operativo.Use regsvr32.exe to register the custom resolver DLL with the operating system. Ad esempio, eseguire il seguente comando dal prompt dei comandi per registrare il sistema di risoluzione dei conflitti aggiuntivi SQL ServerSQL Server :For example, executing the following from the command prompt registers the SQL ServerSQL Server Additive Conflict Resolver:

      regsvr32 ssradd.dll  
      
  5. Se il sistema di risoluzione è un gestore della logica di business, distribuire l'assembly nella stessa cartella del file eseguibile dell'agente di merge (replmerg.exe), nella stessa cartella di un'applicazione che richiama l'agente di merge o nella cartella specificata per il parametro @dotnet_assembly_name al passaggio 3.If the resolver is a business logic handler, deploy the assembly in the same folder as the Merge Agent executable (replmerg.exe), in the same folder as an application that invokes the Merge Agent, or in the folder specified for the @dotnet_assembly_name parameter in step 3.

    Nota

    Il percorso di installazione predefinito del file eseguibile dell'agente di merge è C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM.The default installation location of the Merge Agent executable is C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM.

Per specificare un sistema di risoluzione personalizzato durante la definizione di un articolo di mergeTo specify a custom resolver when defining a merge article

  1. Se si intende utilizzare un sistema di risoluzione dei conflitti personalizzato, crearlo e registrarlo utilizzando la procedura sopra riportata.If you plan to use a custom conflict resolver, create and register the resolver using the above procedure.

  2. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e prendere nota del nome del sistema di risoluzione personalizzato desiderato nel campo valore del set di risultati.At the Publisher, execute sp_enumcustomresolvers (Transact-SQL) and note the name of the desired custom resolver in the value field of result set.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergearticle (Transact-SQL).At the Publisher on the publication database, execute sp_addmergearticle (Transact-SQL). Specificare il nome del sistema di risoluzione ottenuto al passaggio 2 per @article_resolver ed eventuale input obbligatorio per il sistema di risoluzione personalizzato utilizzando il parametro @resolver_info .Specify the name of the resolver from step 2 for @article_resolver and any required input to the custom resolver using the @resolver_info parameter. Per sistemi di risoluzione personalizzati basati su stored procedure, @resolver_info corrisponde al nome della stored procedure.For stored procedure-based custom resolvers, @resolver_info is the name of the stored procedure. Per altre informazioni sull'input richiesto per i sistemi di risoluzione dei conflitti forniti da MicrosoftMicrosoft, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.For more information about required input for resolvers supplied by MicrosoftMicrosoft, see Microsoft COM-Based Resolvers.

Per specificare o modificare un sistema di risoluzione personalizzato per un articolo di merge esistenteTo specify or change a custom resolver for an existing merge article

  1. Per determinare se per un articolo è stato definito un sistema di risoluzione personalizzato oppure per ottenere il nome del sistema di risoluzione, eseguire sp_helpmergearticle (Transact-SQL).To determine if a custom resolver has been defined for an article, or to get the name of the resolver, execute sp_helpmergearticle (Transact-SQL). Se per l'articolo è stato definito un sistema di risoluzione personalizzato, il relativo nome verrà visualizzato nel campo article_resolver .If there is a custom resolver defined for the article, its name will be displayed in the article_resolver field. Eventuale input fornito al sistema di risoluzione verrà visualizzato nel campo resolver_info del set di risultati.Any input supplied to the resolver will be displayed in the resolver_info field of the result set.

  2. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e prendere nota del nome del sistema di risoluzione personalizzato desiderato nel campo value del set di risultati.At the Publisher, execute sp_enumcustomresolvers (Transact-SQL) and note the name of the desired custom resolver in the value field of the result set.

  3. Nel database di pubblicazione del server di pubblicazione eseguire sp_changemergearticle (Transact-SQL).At the Publisher on the publication database, execute sp_changemergearticle (Transact-SQL). Specificare il valore article_resolver, incluso il percorso completo dei gestori della logica di business, per @property, nonché il nome del sistema di risoluzione personalizzato desiderato ottenuto al passaggio 2 per @value.Specify a value of article_resolver, including the full path for business logic handlers, for @property, and the name of the desired custom resolver from step 2 for @value.

  4. Per modificare l'eventuale input richiesto per il sistema di risoluzione personalizzato, eseguire nuovamente sp_changemergearticle (Transact-SQL).To change any required input for the custom resolver, execute sp_changemergearticle (Transact-SQL) again. Specificare il valore resolver_info per @property ed eventuale input obbligatorio per il sistema di risoluzione personalizzato per @value.Specify a value of resolver_info for @property and any required input to the custom resolver for @value. Per sistemi di risoluzione personalizzati basati su stored procedure, @resolver_info corrisponde al nome della stored procedure.For stored procedure-based custom resolvers, @resolver_info is the name of the stored procedure. Per altre informazioni sull'input richiesto, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.For more information about required input, see Microsoft COM-Based Resolvers.

Per annullare la registrazione di un sistema di risoluzione dei conflitti personalizzatoTo unregister a custom conflict resolver

  1. Nel server di pubblicazione eseguire sp_enumcustomresolvers (Transact-SQL) e prendere nota del nome del sistema di risoluzione personalizzato da rimuovere nel campo value del set di risultati.At the Publisher, execute sp_enumcustomresolvers (Transact-SQL) and note the name of the custom resolver to remove in the value field of the result set.

  2. Eseguire sp_unregistercustomresolver (Transact-SQL) nel database di distribuzione.Execute sp_unregistercustomresolver (Transact-SQL) at the Distributor. Specificare il nome completo del sistema di risoluzione personalizzato ottenuto al passaggio 1 per @article_resolver.Specify the full name of the custom resolver from step 1 for @article_resolver.

Esempi (Transact-SQL) Examples (Transact-SQL)

In questo esempio viene creato un nuovo articolo e viene impostato l'utilizzo del sistema di risoluzione dei conflitti medi SQL ServerSQL Server per calcolare la media della colonna UnitPrice in caso di conflitti.This example creates a new article and specifies that the SQL ServerSQL Server Averaging Conflict Resolver be used to calculate the average of the UnitPrice column when conflicts occur.

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 questo esempio un articolo viene impostato in modo da utilizzare il sistema di risoluzione dei conflitti aggiuntivi SQL ServerSQL Server per calcolare la somma della colonna UnitsOnOrder in caso di conflitti.This example changes an article to specify using the SQL ServerSQL Server Additive Conflict Resolver to calculate the sum of the UnitsOnOrder column when conflicts occur.

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

Vedere ancheSee Also

Advanced Merge Replication Conflict Detection and Resolution Advanced Merge Replication Conflict Detection and Resolution
Implement a Business Logic Handler for a Merge Article Implement a Business Logic Handler for a Merge Article