sp_changemergearticle (Transact-SQL)

Si applica a: SQL Server

Vengono modificate le proprietà di un articolo di tipo merge. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_changemergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]

Argomenti

[ @publication = ] N'publication'

Nome della pubblicazione in cui è presente l'articolo. @publication è sysname, senza impostazione predefinita.

[ @article = ] N'article'

Nome dell'articolo da modificare. @article è sysname, senza impostazione predefinita.

[ @property = ] N'property'

Proprietà da modificare per l'articolo e la pubblicazione specificati. @property è sysname e può essere uno dei valori elencati nella tabella seguente.

[ @value = ] N'value'

Nuovo valore della proprietà specificata. @value è nvarchar(2000)e può essere uno dei valori elencati nella tabella seguente.

Nella tabella seguente vengono descritte le proprietà degli articoli e i valori corrispondenti.

Proprietà Valori Descrizione
allow_interactive_resolver true Abilita l'utilizzo di un sistema di risoluzione interattivo per l'articolo.
false Disabilita l'utilizzo di un sistema di risoluzione interattivo per l'articolo.
article_resolver Sistema di risoluzione personalizzato per l'articolo. Proprietà valida solo per gli articoli di tabelle.
check_permissions (bitmap) 0x00 Le autorizzazioni a livello di tabella non vengono controllate.
0x10 Le autorizzazioni a livello di tabella vengono controllate nel server di pubblicazione prima dell'applicazione nel server di pubblicazione delle istruzioni INSERT eseguite nel Sottoscrittore.
0x20 Le autorizzazioni a livello di tabella vengono controllate nel server di pubblicazione prima dell'applicazione nel server di pubblicazione delle istruzioni UPDATE eseguite nel Sottoscrittore.
0x40 Le autorizzazioni a livello di tabella vengono controllate nel server di pubblicazione prima dell'applicazione nel server di pubblicazione delle istruzioni DELETE eseguite nel Sottoscrittore.
column_tracking true Attiva il rilevamento a livello di colonna. Proprietà valida solo per gli articoli di tabelle.

Nota: non è possibile usare il rilevamento a livello di colonna durante la pubblicazione di tabelle con più di 246 colonne.
false Disattiva il rilevamento a livello di colonna e mantiene il rilevamento dei conflitti a livello di riga. Proprietà valida solo per gli articoli di tabelle.
compensate_for_errors true Vengono eseguite azioni di compensazione quando si verificano errori durante la sincronizzazione. Per altre informazioni, vedere sp_addmergearticle.
false Le azioni di compensazione non vengono eseguite, ovvero il comportamento predefinito. Per altre informazioni, vedere sp_addmergearticle.

Importante: anche se i dati nelle righe interessate potrebbero sembrare non convergenti, non appena si risovono errori, è possibile applicare modifiche e convergere i dati. Se la tabella di origine per un articolo è già pubblicata in un'altra pubblicazione, il valore di compensate_for_errors deve essere lo stesso per entrambi gli articoli.
creation_script Percorso e nome di uno script di schema dell'articolo facoltativo utilizzato per la creazione dell'articolo nel database di sottoscrizione.
delete_tracking true Le istruzioni DELETE vengono replicate, situazione corrispondente al funzionamento predefinito.
false Le istruzioni DELETE non vengono replicate.

Importante: è necessario rimuovere manualmente l'impostazione delete_tracking di per false ottenere la mancata convergenza dei risultati e le righe eliminate.
description Voce descrittiva per l'articolo.
destination_owner Nome del proprietario dell'oggetto nel database di sottoscrizione, se non dbo.
identity_range bigint che specifica le dimensioni dell'intervallo da usare quando si assegnano nuovi valori Identity se l'articolo è identityrangemanagementoption impostato su auto o auto_identity_range impostato su true. Proprietà valida solo per gli articoli di tabelle. Per altre informazioni, vedere la sezione "Replica di tipo merge" di Replica colonne Identity.
identityrangemanagementoption manual Disabilita la gestione automatica degli intervalli di valori Identity. Contrassegna le colonne Identity con NOT FOR REPLICATION per consentire la gestione manuale degli intervalli di valori Identity. Per altre informazioni, vedere Replicare colonne Identity.
none Disabilita tutti i tipi di gestione degli intervalli di valori Identity.
logical_record_level_conflict_detection true Viene rilevato un conflitto in presenza di modifiche apportate in qualsiasi posizione del record logico. Richiede che logical_record_level_conflict_resolution sia impostato su true.
false Il rilevamento dei conflitti predefinito viene usato come specificato da column_tracking.
logical_record_level_conflict_resolution true L'intero record logico prevalente sovrascrive il record logico perdente.
false Le righe vincenti non sono vincolate al record logico.
partition_options 0 Il filtro per l'articolo è statico o non produce un subset univoco di dati per ogni partizione, ovvero una partizione "sovrapposta".
1 Le partizioni si sovrappongono e gli aggiornamenti DML eseguiti nel Sottoscrittore non possono modificare la partizione a cui appartiene una riga.
2 Il filtro applicato all'articolo restituisce partizioni non sovrapposte, ma più Sottoscrittori possono ricevere la stessa partizione.
3 Il filtro applicato all'articolo restituisce partizioni non sovrapposte univoche per ogni sottoscrizione.

Nota: se si specifica un valore di 3 per partition_options, può essere presente una sola sottoscrizione per ogni partizione di dati in tale articolo. Se viene creata una seconda sottoscrizione, in cui il criterio di filtro della nuova sottoscrizione viene risolto nella stessa partizione della sottoscrizione esistente, la sottoscrizione esistente viene eliminata.
pre_creation_command none Se la tabella esiste già nel Sottoscrittore, non viene eseguita alcuna azione.
delete Esegue un'operazione di eliminazione in base alla clausola WHERE del filtro di subset.
drop Elimina la tabella prima di ricrearla.
truncate Tronca la tabella di destinazione.
processing_order int che indica l'ordine di elaborazione degli articoli in una pubblicazione di tipo merge.
pub_identity_range bigint che specifica le dimensioni dell'intervallo allocate a un Sottoscrittore con una sottoscrizione server se l'articolo è identityrangemanagementoption impostato su auto o auto_identity_range impostato su true. L'intervallo di valori Identity è riservato al Sottoscrittore di ripubblicazione per l'assegnazione ai propri Sottoscrittori. Proprietà valida solo per gli articoli di tabelle. Per altre informazioni, vedere la sezione "Replica di tipo merge" di Replica colonne Identity.
published_in_tran_pub true L'articolo è pubblicato anche in una pubblicazione transazionale.
false L'articolo non viene pubblicato anche in una pubblicazione transazionale.
resolver_info Specifica le informazioni aggiuntive necessarie per un sistema di risoluzione personalizzato. Alcuni resolver Microsoft richiedono una colonna fornita come input per il sistema di risoluzione. resolver_infoè nvarchar(255), con un valore predefinito .NULL Per altre informazioni, vedere Conflitti avanzati di replica di tipo merge - Resolver basati su COM.
schema_option (bitmap) Per altre informazioni, vedere la sezione Osservazioni.
0x00 Disabilita lo scripting dal agente di snapshot e usa lo script fornito in creation_script.
0x01 Genera lo script per la creazione di oggetti (CREATE TABLE, CREATE PROCEDURE e così via).
0x10 Genera un indice cluster corrispondente.
0x20 Converte i tipi di dati definiti dall'utente in tipi di dati di base nel Sottoscrittore. Questa opzione non può essere usata quando è presente un vincolo CHECK o DEFAULT in una colonna di tipo definito dall'utente (UDT), se una colonna definito dall'utente fa parte della chiave primaria o se una colonna calcolata fa riferimento a una colonna definita dall'utente.
0x40 Genera indici non cluster corrispondenti.
0x80 include i vincoli di integrità referenziale dichiarati nelle chiavi primarie.
0x100 Replica gli eventuali trigger dell'utente di un articolo di tabella.
0x200 Replica i vincoli FOREIGN KEY. Se la tabella a cui si fa riferimento non fa parte di una pubblicazione, tutti i vincoli FOREIGN KEY di una tabella pubblicata non vengono replicati.
0x400 Replica i vincoli CHECK.
0x800 Replica i valori predefiniti.
0x1000 Replica le regole di confronto a livello di colonna.
0x2000 Replica le proprietà estese associate all'oggetto di origine dell'articolo pubblicato.
0x4000 Replica le eventuali chiavi univoche definite in un articolo di tabella.
0x8000 Genera istruzioni ALTER TABLE per la creazione di script dei vincoli.
0x10000 Replica i vincoli CHECK come NOT FOR REPLICATION in modo che i vincoli non vengano applicati durante la sincronizzazione.
0x20000 Replica i vincoli FOREIGN KEY come NOT FOR REPLICATION in modo che i vincoli non vengano applicati durante la sincronizzazione.
0x40000 Replica i filegroup associati a una tabella o un indice partizionato.
0x80000 Replica lo schema di partizione per una tabella partizionata.
0x100000 Replica lo schema di partizione per un indice partizionato.
0x200000 Replica le statistiche della tabella.
0x400000 Replica le associazioni predefinite.
0x800000 Replica le associazioni di regole.
0x1000000 Replica l'indice full-text.
0x2000000 Le raccolte di XML Schema associate alle colonne xml non vengono replicate.
0x4000000 Replica gli indici nelle colonne xml .
0x8000000 Crea gli schemi non ancora presenti nel Sottoscrittore.
0x10000000 Converte le colonne xml in ntext nel Sottoscrittore.
0x20000000 Converte i tipi di dati per oggetti di grandi dimensioni (nvarchar(max), varchar(max)e varbinary(max)) introdotti in SQL Server 2005 (9.x) in tipi di dati supportati in SQL Server 2000 (8.x).
0x40000000 Replica le autorizzazioni.
0x80000000 Tentare di eliminare le dipendenze a tutti gli oggetti che non fanno parte della pubblicazione.
0x100000000 Usare questa opzione per replicare l'attributo FILESTREAM, se specificato nelle colonne varbinary(max). Non specificare questa opzione se si esegue la replica delle tabelle nei Sottoscrittori di SQL Server 2005 (9.x). La replica di tabelle con colonne FILESTREAM nei Sottoscrittori di SQL Server 2000 (8.x) non è supportata, indipendentemente dalla modalità di impostazione di questa opzione di schema. Vedere l'opzione 0x800000000correlata .
0x200000000 Converte i tipi di dati di data e ora (date, time, datetimeoffset e datetime2) introdotti in SQL Server 2008 (10.0.x) in tipi di dati supportati nelle versioni precedenti di SQL Server.
0x400000000 Replica l'opzione di compressione per dati e indici. Per ulteriori informazioni, vedi Compressione dei dati.
0x800000000 Impostare questa opzione per archiviare i dati FILESTREAM nel relativo filegroup nel Sottoscrittore. Se questa opzione non è impostata, i dati FILESTREAM vengono archiviati nel filegroup predefinito. La replica non crea filegroup; pertanto, se si imposta questa opzione, è necessario creare il filegroup prima di applicare lo snapshot nel Sottoscrittore. Per altre informazioni su come creare oggetti prima di applicare lo snapshot, vedere Eseguire script prima e dopo l'applicazione dello snapshot.

Vedere l'opzione 0x100000000correlata .
0x1000000000 Converte i tipi CLR (Common Language Runtime) definiti dall'utente (UDT) in varbinary(max) in modo che le colonne di tipo UDT possano essere replicate nei Sottoscrittori che eseguono SQL Server 2005 (9.x).
0x2000000000 Converte il tipo di dati hierarchyid in varbinary(max) in modo che le colonne di tipo hierarchyid possano essere replicate nei Sottoscrittori che eseguono SQL Server 2005 (9.x). Per altre informazioni su come usare le colonne hierarchyid nelle tabelle replicate, vedere riferimento al metodo del tipo di dati hierarchyid.
0x4000000000 Replica gli eventuali indici filtrati sulla tabella. Per altre informazioni sugli indici filtrati, vedere Creare indici filtrati.
0x8000000000 Converte i tipi di dati geography e geometry in varbinary(max) in modo che le colonne di questi tipi possano essere replicate nei Sottoscrittori che eseguono SQL Server 2005 (9.x).
0x10000000000 Replica gli indici sulle colonne di tipo geography e geometry.
NULL Il sistema genera automaticamente un'opzione di schema valida per l'articolo.
status active Viene eseguito lo script di elaborazione iniziale per la pubblicazione della tabella.
unsynced Lo script di elaborazione iniziale per la pubblicazione della tabella viene eseguito in occasione della successiva esecuzione dell'agente snapshot.
stream_blob_columns true Viene utilizzata l'ottimizzazione del flusso di dati per la replica di colonne BLOB. Tuttavia, alcune funzionalità della replica di tipo merge, come i record logici, potrebbero impedire l'utilizzo dell'ottimizzazione del flusso. stream_blob_columns è impostato su true quando FILESTREAM è abilitato. In questo modo, la replica dei dati FILESTREAM può essere eseguita in maniera ottimale e si riduce l'utilizzo della memoria. Per forzare gli articoli della tabella FILESTREAM a non usare il flusso BLOB, impostare su stream_blob_columns false.

Importante: l'abilitazione di questa ottimizzazione della memoria potrebbe compromettere le prestazioni del agente di merge durante la sincronizzazione. È consigliabile utilizzare questa opzione solo se vengono replicate colonne contenenti più megabyte di dati.
false L'ottimizzazione non viene usata durante la replica di colonne di oggetti binari di grandi dimensioni.
subscriber_upload_options 0 Nessuna restrizione per gli aggiornamenti eseguiti in un Sottoscrittore con una sottoscrizione client. Le modifiche vengono caricate nel server di pubblicazione. La modifica di questa proprietà potrebbe richiedere la reinizializzazione dei Sottoscrittori esistenti.
1 Le modifiche sono consentite in un Sottoscrittore con una sottoscrizione client, ma non vengono caricate nel server di pubblicazione.
2 Le modifiche non sono consentite in un Sottoscrittore con una sottoscrizione client.
subset_filterclause Clausola WHERE che specifica il filtro orizzontale. Proprietà valida solo per gli articoli di tabelle.

Importante: per motivi di prestazioni, è consigliabile non applicare funzioni ai nomi di colonna nelle clausole di filtro di riga con parametri, ad esempio LEFT([MyColumn]) = SUSER_SNAME(). Se si utilizza HOST_NAME in una clausola di filtro e si esegue l'override del valore HOST_NAME, potrebbe essere necessario convertire i tipi di dati usando CONVERT. Per altre informazioni sulle procedure consigliate per questo caso, vedere la sezione "Override del valore HOST_NAME() in Filtri con parametri - Filtri di riga con parametri.
threshold Valore percentuale usato per i Sottoscrittori che eseguono SQL Server Compact o versioni precedenti di SQL Server. thresholdcontrolla quando il agente di merge assegna un nuovo intervallo di valori Identity. Quando viene utilizzata la percentuale di valori specificata in threshold, l'agente di merge crea un nuovo intervallo di valori Identity. Utilizzato quando identityrangemanagementoption è impostato su auto o auto_identity_range è impostato su true. Proprietà valida solo per gli articoli di tabelle. Per altre informazioni, vedere la sezione "Replica di tipo merge" di Replica colonne Identity.
verify_resolver_signature 1 La firma digitale in un sistema di risoluzione personalizzato viene verificata per determinare se proviene da un'origine attendibile.
0 La firma digitale in un sistema di risoluzione personalizzato non viene verificata per determinare se proviene da un'origine attendibile.
NULL (predefinito) Restituisce l'elenco dei valori supportati per @property.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Segnala che l'azione eseguita da questa stored procedure potrebbe invalidare uno snapshot esistente. @force_invalidate_snapshot è bit, con il valore predefinito 0.

  • 0 specifica che le modifiche apportate all'articolo di merge non causano l'invalidità dello snapshot. Se la stored procedure rileva che la modifica richiede un nuovo snapshot, viene generato un errore e non viene apportata alcuna modifica.

  • 1 significa che le modifiche apportate all'articolo di merge potrebbero causare l'invalidità dello snapshot e, se sono presenti sottoscrizioni esistenti che richiedono un nuovo snapshot, concede l'autorizzazione per contrassegnare lo snapshot esistente come obsoleto e un nuovo snapshot generato.

Vedere la sezione Osservazioni per le proprietà che, quando modificate, richiedono la generazione di un nuovo snapshot.

[ @force_reinit_subscription = ] force_reinit_subscription

Segnala che l'azione eseguita dalla stored procedure potrebbe richiedere la reinizializzazione delle sottoscrizioni esistenti. @force_reinit_subscription è bit, con un valore predefinito .0

  • 0 specifica che le modifiche apportate all'articolo di merge non causano la reinizializzazione della sottoscrizione. Se la stored procedure rileva che la modifica richiede la reinizializzazione delle sottoscrizioni esistenti, viene generato un errore e non viene apportata alcuna modifica.

  • 1 significa che le modifiche apportate all'articolo di merge causano la reinizializzazione delle sottoscrizioni esistenti e concede l'autorizzazione per la reinizializzazione della sottoscrizione.

Vedere la sezione Osservazioni per le proprietà che, quando modificate, richiedono la reinizializzazione di tutte le sottoscrizioni esistenti.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_changemergearticle viene usato nella replica di tipo merge.

Poiché sp_changemergearticle viene usato per modificare le proprietà dell'articolo specificate inizialmente tramite sp_addmergearticle, fare riferimento a sp_addmergearticle per altre informazioni su queste proprietà.

Per modificare le proprietà seguenti è necessario che venga generato un nuovo snapshot ed è necessario specificare un valore per 1 il parametro @force_invalidate_snapshot :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • schema_options
  • subset_filterclause

Per modificare le proprietà seguenti è necessario reinizializzare le sottoscrizioni esistenti ed è necessario specificare un valore per 1 il parametro @force_reinit_subscription :

  • check_permissions
  • column_tracking
  • destination_owner
  • pre_creation_command
  • identityrangemanagementoption
  • subscriber_upload_options
  • subset_filterclause
  • creation_script
  • schema_option
  • logical_record_level_conflict_detection
  • logical_record_level_conflict_resolution

Quando si specifica un valore per 3 partition_options, i metadati vengono puliti ogni volta che viene eseguito il agente di merge e lo snapshot partizionato scade più rapidamente. Quando si utilizza questa opzione è consigliabile prendere in considerazione l'abilitazione di snapshot partizionati richiesti dal Sottoscrittore. Per altre informazioni, vedere Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri.

Quando si imposta la column_tracking proprietà , se la tabella è già pubblicata in altre pubblicazioni di tipo merge, il rilevamento delle colonne deve corrispondere al valore utilizzato dagli articoli esistenti in base a questa tabella. Questo parametro è disponibile solo per gli articoli di tabelle.

Se più pubblicazioni pubblicano articoli basati sulla stessa tabella sottostante, la modifica della delete_tracking proprietà o della compensate_for_errors proprietà per un articolo comporta l'applicazione della stessa modifica agli altri articoli basati sulla stessa tabella.

Se l'account di accesso/utente del server di pubblicazione usato dal processo di merge non dispone delle autorizzazioni corrette per la tabella, le modifiche non valide vengono registrate come conflitti.

Quando si modifica il valore di schema_option, il sistema non esegue un aggiornamento bit per bit. Ciò significa che quando si impostano schema_option le sp_changemergearticleimpostazioni di bit esistenti potrebbero essere disattivate. Per mantenere le impostazioni esistenti, è necessario eseguire e (AND bit per bit) tra il valore impostato e il valore corrente di schema_option, che può essere determinato eseguendo sp_helpmergearticle.

Attenzione

Quando si eseguono molti articoli (ad esempio centinaia) di articoli in una pubblicazione e si esegue sp_changemergearticle per uno degli articoli, potrebbe essere necessario molto tempo per completare l'esecuzione.

Tabella delle opzioni dello schema valida

Nella tabella seguente vengono descritti i valori consentiti schema_option , a seconda del tipo di articolo.

Tipo di articolo Valori delle opzioni di schema
func schema only 0x01 e 0x2000
indexed view schema only 0x01, 0x040, , 0x20000x40000, , 0x1000000, e 0x01000x200000
proc schema only 0x01 e 0x2000
table Tutte le opzioni.
view schema only 0x01, 0x040, , 0x20000x40000, , 0x1000000, e 0x01000x200000

Esempi

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_changemergearticle.