sp_changemergearticle (Transact-SQL)
Modifica le proprietà di un articolo di tipo merge. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.
Sintassi
sp_changemergearticle [ @publication = ] 'publication'
, [ @article = ] 'article'
[ , [ @property = ] 'property' ]
[ , [ @value = ] 'value' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
Argomenti
[ @publication=] 'publication'
Nome della pubblicazione che include l'articolo. publication è di tipo sysname e non prevede alcun valore predefinito.[ @article=] 'article'
Nome dell'articolo da modificare. article è di tipo sysname e non prevede alcun valore predefinito.[ @property=] 'property'
Proprietà da modificare per la pubblicazione specificata. property è di tipo nvarchar(30). I possibili valori sono elencati nella tabella seguente.[ @value=] 'value'
Nuovo valore per la proprietà specificata. value è di tipo nvarchar(1000). I possibili valori sono elencati nella tabella seguente.che descrive le proprietà degli articoli e i valori corrispondenti.
Proprietà
Valori
Descrizione
allow_interactive_resolver
true
Attiva 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 (mappa di bit)
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.
NotaIl rilevamento a livello di colonna non può essere utilizzato durante la pubblicazione di tabelle contenenti 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 ulteriori informazioni, vedere sp_addmergearticle.
false
Non vengono eseguite azioni di compensazione, situazione corrispondente al funzionamento predefinito. Per ulteriori informazioni, vedere sp_addmergearticle.
ImportanteAnche se i dati nelle righe interessate potrebbero sembrare non convergenti, non appena vengono risolti gli eventuali errori generati le modifiche potranno essere applicate e si otterrà la convergenza dei dati. Se la tabella di origine di un articolo è già pubblicata in un'altra pubblicazione, il valore di compensate_for_errors deve essere uguale 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.
ImportanteL'impostazione di delete_tracking su false causa la non convergenza dei dati e le righe eliminate devono essere rimosse manualmente.description
Voce descrittiva per l'articolo.
destination_owner
Nome del proprietario dell'oggetto nel database di sottoscrizione, se diverso da dbo.
identity_range
Valore bigint che specifica le dimensioni dell'intervallo da utilizzare per l'assegnazione di nuovi valori Identity se per l'articolo la proprietà identityrangemanagementoption è impostata su auto o la proprietà auto_identity_range è impostata su true. Proprietà valida solo per gli articoli di tabelle. Per ulteriori informazioni, vedere la sezione relativa alla replica di tipo merge in Replica di 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 ulteriori informazioni, vedere Replica di 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. È necessario impostare la proprietà logical_record_level_conflict_resolution su true.
false
Viene utilizzata la funzionalità predefinita di rilevamento dei conflitti, in base al valore specificato per column_tracking.
logical_record_level_conflict_resolution
true
L'intero record logico prevalente sovrascrive il record logico perdente.
false
Le righe prevalenti non sono vincolate al record logico.
partition_options
0
Il filtro applicato all'articolo è statico oppure non restituisce un subset di dati univoco per ogni partizione, ovvero si creano partizioni sovrapposte.
1
Le partizioni sono sovrapposte 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.
NotaSe si specifica il valore 3 per la proprietà partition_options, per ogni partizione dei dati dell'articolo può esistere una sola sottoscrizione. Se si crea una seconda sottoscrizione nella quale il criterio di filtro porta alla restituzione della stessa partizione della sottoscrizione esistente, quest'ultima 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
Valore int che indica l'ordine di elaborazione degli articoli in una pubblicazione di tipo merge.
pub_identity_range
Valore bigint che specifica le dimensioni dell'intervallo allocato a un Sottoscrittore con una sottoscrizione server se per l'articolo la proprietà identityrangemanagementoption è impostata su auto o la proprietà auto_identity_range è impostata 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 ulteriori informazioni, vedere la sezione relativa alla replica di tipo merge in Replica di colonne Identity.
published_in_tran_pub
true
L'articolo è pubblicato anche in una pubblicazione transazionale.
false
L'articolo non è pubblicato anche in una pubblicazione transazionale.
resolver_info
Specifica informazioni aggiuntive necessarie per un sistema di risoluzione personalizzato. Alcuni sistemi di risoluzione Microsoft richiedono una colonna come input. resolver_info è di tipo nvarchar(255) e il valore predefinito è NULL. Per ulteriori informazioni, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.
schema_option (mappa di bit)
Per ulteriori informazioni, vedere la sezione Osservazioni di seguito in questo argomento.
0x00
Disabilita la creazione di script dell'agente snapshot e utilizza lo script specificato 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 utilizzata quando è presente un vincolo CHECK o DEFAULT su una colonna con tipo definito dall'utente (UDT), se una colonna UDT è inclusa nella chiave primaria o se una colonna calcolata fa riferimento a una colonna UDT.
0x40
Genera uno o più 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 con riferimenti non fa parte di una pubblicazione, tutti i vincoli FOREIGN KEY in 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 vengono imposti 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 di 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 a colonne xml non vengono replicate.
0x4000000
Replica gli indici su 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 LOB (Large Object) (nvarchar(max), varchar(max) e varbinary(max)) introdotti in SQL Server 2005 in tipi di dati supportati in SQL Server 2000. Per informazioni sulla modalità di mapping di questi tipi, vedere la sezione relativa al mapping di nuovi tipi di dati per le versioni precedenti in Utilizzo di più versioni di SQL Server in una topologia di replica.
0x40000000
Replica le autorizzazioni.
0x80000000
Tenta di eliminare le dipendenze da tutti gli oggetti che non fanno parte della pubblicazione.
0x100000000
Utilizzare questa opzione per replicare l'attributo FILESTREAM se è specificato nelle colonne varbinary(max). Non specificare questa opzione se si stanno replicando tabelle nei Sottoscrittori SQL Server 2005. La replica di tabelle con colonne FILESTREAM nei Sottoscrittori SQL Server 2000 non è supportata, indipendentemente dall'impostazione di questa opzione dello schema. Vedere l'opzione correlata 0x800000000.
0x200000000
Converte i tipi di dati data/ora (date, time, datetimeoffset e datetime2) introdotti in SQL Server 2008 in tipi di dati supportati nelle versioni precedenti di SQL Server. Per informazioni sulla modalità di mapping di questi tipi, vedere la sezione relativa al mapping di nuovi tipi di dati per le versioni precedenti in Utilizzo di più versioni di SQL Server in una topologia di replica.
0x400000000
Replica l'opzione di compressione per dati e indici. Per ulteriori informazioni, vedere Creazione di tabelle e di indici compressi.
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. Tramite la replica non vengono creati filegroup, pertanto, se si imposta questa opzione, è necessario creare il filegroup prima di applicare lo snapshot nel Sottoscrittore. Per ulteriori informazioni su come creare gli oggetti prima di applicare lo snapshot, vedere Esecuzione di script prima e dopo l'applicazione dello snapshot.
Vedere l'opzione correlata 0x100000000.
0x1000000000
Converte i tipi CLR definiti dall'utente in varbinary(max) in modo che le colonne con tipo definito dall'utente possano essere replicate nei Sottoscrittori che eseguono SQL Server 2005.
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. Per ulteriori informazioni su come utilizzare le colonne hierarchyid nelle tabelle replicate, vedere hierarchyid (Transact-SQL).
0x4000000000
Replica gli eventuali indici filtrati sulla tabella. Per ulteriori informazioni sugli indici filtrati, vedere Linee guida per la progettazione di indici filtrati.
0x8000000000
Converte i tipi di dati geography e geometryin varbinary(max) in modo che le colonne di questi tipi possano essere replicate nei Sottoscrittori che eseguono SQL Server 2005.
0x10000000000
Replica gli indici nelle 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 comunque impedire l'utilizzo dell'ottimizzazione del flusso. Il parametro stream_blob_columns è impostato su true se FILESTREAM è abilitato. In questo modo viene consentita la corretta esecuzione della replica dei dati FILESTREAM e viene ridotto l'utilizzo della memoria. Per fare in modo che negli articoli della tabella FILESTREAM non vengano utilizzati flussi blob, impostare il parametro stream_blob_columns su false.
ImportanteL'attivazione di questa ottimizzazione della memoria può ridurre le prestazioni dell'agente di merge durante la sincronizzazione. È consigliabile utilizzare questa opzione solo se vengono replicate colonne contenenti più megabyte di dati.false
Non viene utilizzata l'ottimizzazione per la replica di colonne BLOB.
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
Sono consentite modifiche in un Sottoscrittore con una sottoscrizione client, ma tali modifiche non vengono caricate nel server di pubblicazione.
2
Non sono consentite modifiche in un Sottoscrittore con una sottoscrizione client.
subset_filterclause
Clausola WHERE che specifica il filtro orizzontale. Proprietà valida solo per gli articoli di tabelle.
ImportantePer motivi relativi alle prestazioni, è consigliabile evitare di applicare funzioni ai nomi di colonna nelle clausole di filtro di riga con parametri, come LEFT([MyColumn]) = SUSER_SNAME(). Se si utilizza HOST_NAME in una clausola di filtro e si sostituisce il valore di HOST_NAME, potrebbe essere necessario convertire i tipi di dati tramite CONVERT. Per ulteriori informazioni sulle procedure consigliate in questo caso, vedere la sezione relativa alla sostituzione del valore HOST_NAME() in Filtri di riga con parametri.threshold
Valore percentuale utilizzato per i Sottoscrittori che eseguono SQL Server Compact 3.5 SP2 o versioni precedenti di SQL Server. threshold determina quando l'agente di merge deve assegnare 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. Proprietà utilizzata quando la proprietà identityrangemanagementoption è impostata su auto o la proprietà auto_identity_range è impostata su true. Proprietà valida solo per gli articoli di tabelle. Per ulteriori informazioni, vedere la sezione relativa alla replica di tipo merge in Replica di colonne Identity.
verify_resolver_signature
1
La firma digitale di un sistema di risoluzione personalizzato viene verificata per stabilire se la fonte è attendibile.
0
La firma digitale di un sistema di risoluzione personalizzato non viene verificata per stabilire se la fonte è 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 è di tipo bit e il valore predefinito è 0.0 specifica che le modifiche apportate all'articolo di merge non invalideranno lo snapshot. Se la stored procedure rileva che la modifica richiede un nuovo snapshot, viene generato un errore e non viene apportata alcuna modifica.
1 indica che le modifiche apportate all'articolo di merge potrebbero invalidare lo snapshot e, se sono disponibili sottoscrizioni che richiedono un nuovo snapshot, consente di contrassegnare lo snapshot esistente come obsoleto e di generarne uno nuovo.
Per informazioni sulle proprietà che richiedono la generazione di un nuovo snapshot quando vengono modificate, vedere la sezione Osservazioni.
[ @force_reinit_subscription = ] force_reinit_subscription
Segnala che l'azione eseguita dalla stored procedure potrebbe richiedere la reinizializzazione delle sottoscrizioni esistenti. force_reinit_subscription è di tipo bit e il 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 indica che le modifiche apportate all'articolo di merge causano la reinizializzazione delle sottoscrizioni esistenti e consente la reinizializzazione.
Vedere la sezione Osservazioni per informazioni sulle proprietà che in caso di modifica richiedono la reinizializzazione di tutte le sottoscrizioni esistenti.
Valori restituiti
0 (esito positivo) o 1 (esito negativo)
Osservazioni
La stored procedure sp_changemergearticle viene utilizzata per la replica di tipo merge.
Poiché sp_changemergearticle viene utilizzata per modificare le proprietà degli articoli specificate inizialmente tramite sp_addmergearticle, vedere sp_addmergearticle per ulteriori informazioni su queste proprietà.
La modifica delle proprietà seguenti richiede la generazione di un nuovo snapshot ed è necessario specificare il valore 1 per il parametro force_invalidate_snapshot:
check_permissions
column_tracking
destination_owner
pre_creation_cmd
schema_options
subset_filterclause
La modifica delle proprietà seguenti richiede la reinizializzazione delle sottoscrizioni esistenti ed è necessario specificare il valore 1 per il parametro force_reinit_subscription:
check_permissions
column_tracking
destination_owner
subscriber_upload_options
subset_filterclause
Se si imposta il valore 3 per partition_options, la rimozione dei metadati viene eseguita per ogni esecuzione dell'agente di merge e lo snapshot partizionato scade più rapidamente. Quando si utilizza questa opzione è consigliabile prendere in considerazione l'attivazione di snapshot partizionati richiesti dal Sottoscrittore. Per ulteriori informazioni, vedere Snapshot per pubblicazioni di tipo merge con filtri con parametri.
Per l'impostazione della proprietà column_tracking, se la tabella è già pubblicata in altre pubblicazioni di tipo merge, è necessario utilizzare lo stesso valore di rilevamento a livello di colonna utilizzato dagli articoli esistenti basati su questa tabella. Questo parametro è disponibile solo per gli articoli di tabelle.
Se più pubblicazioni pubblicano articoli basati sulla stessa tabella sottostante, la modifica della proprietà delete_tracking o della proprietà compensate_for_errors per un articolo causa la propagazione della stessa modifica a tutti gli altri articoli basati sulla stessa tabella.
Se l'account di accesso o l'account utente del server di pubblicazione utilizzato per il processo di merge non dispone delle autorizzazioni corrette per le tabelle, 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 imposta un valore schema_option tramite sp_changemergearticle le impostazioni di bit esistenti potrebbero essere disattivate. Per mantenere le impostazioni esistenti, è necessario eseguire & (AND bit per bit) tra il valore da impostare e il valore corrente di schema_option, che è possibile determinare eseguendo sp_helpmergearticle.
Tabella delle opzioni di schema valide
Nella tabella seguente vengono descritti i valori schema_optionconsentiti in base al tipo di articolo.
Tipo di articolo |
Valori delle opzioni di schema |
---|---|
func schema only |
0x01 e 0x2000 |
indexed view schema only |
0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 e 0x200000 |
proc schema only |
0x01 e 0x2000 |
table |
Tutte le opzioni. |
view schema only |
0x01, 0x040, 0x0100, 0x2000, 0x40000, 0x1000000 e 0x200000 |
Esempio
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 [AdventureWorks2008R2]
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 del ruolo predefinito del database db_owner possono eseguire sp_changemergearticle.
Vedere anche