Procedura: Implementazione di un sistema di risoluzione dei conflitti personalizzato basato su stored procedure per un articolo di merge (programmazione Transact-SQL della replica)
È possibile scrivere un sistema di risoluzione dei conflitti personalizzato come stored procedure Transact-SQL in ogni server di pubblicazione. Durante la sincronizzazione questa stored procedure viene richiamata quando vengono rilevati conflitti in un articolo per il quale il sistema di risoluzione è stato registrato e l'agente di merge passa le informazioni sulla riga con conflitti ai parametri obbligatori della procedura. I sistemi di risoluzione dei conflitti personalizzati basati su stored procedure vengono sempre creati nel server di pubblicazione.
[!NOTA]
Microsoft I sistemi di risoluzione basati su stored procedure MicrosoftSQL Server vengono richiamati solo per gestire conflitti causati da modifiche apportate alle righe. Non possono essere utilizzati per gestire altri tipi di conflitti, ad esempio errori di inserimento dovuti a violazioni di PRIMARY KEY o del vincolo di indice univoco.
Per creare un sistema di risoluzione dei conflitti personalizzato basato su stored procedure
Nella pubblicazione o nel database msdb del server di pubblicazione creare una nuova stored procedure di sistema che implementi i parametri obbligatori seguenti:
Parametro
Tipo di dati
Descrizione
@tableowner
sysname
Nome del proprietario della tabella per la quale risolvere un conflitto. Si tratta del proprietario della tabella nel database di pubblicazione.
@tablename
sysname
Nome della tabella per la quale risolvere un conflitto.
@rowguid
uniqueidentifier
Identificatore univoco per la riga in cui è presente il conflitto.
@subscriber
sysname
Nome del server da cui viene propagata una modifica in conflitto.
@subscriber_db
sysname
Nome del database da cui viene propagata una modifica in conflitto.
@log_conflict OUTPUT
int
Indica se il processo di merge deve registrare un conflitto da risolvere in un secondo momento:
0 = Il conflitto non viene registrato.
1 = La riga in conflitto è quella del Sottoscrittore.
2 = La riga in conflitto è quella del server di pubblicazione.
@conflict_message OUTPUT
nvarchar(512)
Messaggio da visualizzare per la risoluzione se il conflitto viene registrato.
@destowner
sysname
Proprietario della tabella pubblicata nel Sottoscrittore.
Questa stored procedure utilizza i valori passati dall'agente di merge a questi parametri per implementare la logica di risoluzione dei conflitti personalizzata. Deve restituire un solo set di risultati della riga la cui struttura è identica a quella della tabella di base e che contiene i valori dei dati per la versione confermata della riga.
Concedere autorizzazioni EXECUTE sulla stored procedure a qualsiasi account di accesso utilizzato dai Sottoscrittori per la connessione al server di pubblicazione.
Per utilizzare un sistema di risoluzione dei conflitti personalizzato con un nuovo articolo di tabella
- Eseguire sp_addmergearticle per definire un articolo, specificando il valore del Sistema di risoluzione delle stored procedure di Microsoft SQL Server per il parametro @article_resolver e il nome della stored procedure che implementa la logica del sistema di risoluzione dei conflitti per il parametro @resolver_info. Per ulteriori informazioni, vedere Procedura: Definizione di un articolo (programmazione Transact-SQL della replica).
Per utilizzare un sistema di risoluzione dei conflitti personalizzato con un articolo di tabella esistente
Eseguire sp_changemergearticle, specificando @publication, @article, il valore article_resolver per @property e il valore del Sistemadi risoluzione delle stored procedure di Microsoft SQL Server per @value.
Eseguire sp_changemergearticle, specificando @publication, @article, il valore resolver_info per @property e il nome della stored procedure che implementa la logica del sistema di risoluzione dei conflitti per @value.