sp_changemergearticle (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate)

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

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

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 in cui è presente l'articolo. publication è sysname, senza alcun valore predefinito.

[ @article = ] 'article' Nome dell'articolo da modificare. article è sysname, senza alcun valore predefinito.

[ @property = ] 'property' Proprietà da modificare per l'articolo e la pubblicazione specificata. property è nvarchar(30) e può essere uno dei valori elencati nella tabella.

[ @value = ] 'value' Nuovo valore per la proprietà specificata. value è nvarchar(1000) e può essere uno dei valori elencati nella tabella.

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 quando si pubblicano 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, vederesp_addmergearticle .
false Non vengono eseguite azioni di compensazione, situazione corrispondente al funzionamento predefinito. Per altre informazioni, vederesp_addmergearticle .

Importante Anche se i dati nelle righe interessate potrebbero sembrare fuori convergenza, non appena si rilascino gli errori, è possibile applicare le modifiche e i dati convergono. * * * * 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 * * L'delete_tracking su false comporta la non convergenza 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 non dbo.
identity_range bigint che specifica le dimensioni dell'intervallo da usare per l'assegnazione di nuovi valori Identity se l'opzione identityrangemanagementoption dell'articolo è impostata su auto o auto_identity_range impostata su true. Proprietà valida solo per gli articoli di tabelle. Per altre informazioni, vedere la sezione "Replica di tipo merge" di Replicare colonne Identity.
identityrangemanagementoption Manuale 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.
nessuna 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 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 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.

Nota: se si specifica il valore 3 per partition_options, può essere presente una sola sottoscrizione per ogni partizione di dati in tale articolo. 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 nessuna 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.
Goccia 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 bigint che specifica le dimensioni dell'intervallo allocate a un Sottoscrittore con una sottoscrizione server se l'opzione identityrangemanagementoption dell'articolo è impostata su auto o auto_identity_range 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 Replicare 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 le 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), con valore predefinito NULL. Per altre informazioni, vedere Sistemi di risoluzione dei conflitti basati su Microsoft COM.
schema_option (bitmap) Per ulteriori informazioni, vedere la sezione Osservazioni di seguito in questo argomento.
0x00 Disabilita la creazione di script da 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 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 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 vengono imposti 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 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 a 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 in tipi di dati supportati SQL Server 2005 (9.x) in SQL Server 2000 (8.x) .
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 (9.x). La replica di tabelle con colonne FILESTREAM nei Sottoscrittori non è supportata, indipendentemente dalla modalità di impostazione SQL Server 2000 (8.x) di questa opzione dello schema. Vedere l'opzione correlata 0x800000000.
0x200000000 Converte i tipi di dati di data e ora (date, time, datetimeoffset e datetime2) introdotti in in tipi di dati supportati SQL Server 2008 nelle versioni precedenti di SQL Server .
0x400000000 Replica l'opzione di compressione per dati e indici. Per altre informazioni, vedere Data Compression.
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 altre informazioni su come creare oggetti prima di applicare lo snapshot, vedere Eseguire script prima e dopo l'applicazione dello snapshot.

Vedere l'opzione correlata 0x100000000.
0x1000000000 Converte i tipi CLR (User-Defined Type) 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 hierarchyid (Transact-SQL).
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 in colonne di tipo geography e geometry.
NULL Il sistema genera automaticamente un'opzione di schema valida per l'articolo.
Stato 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 di tabella FILESTREAM a non usare il flusso BLOB, impostare stream_blob_columns su false.

Importante L'abilitazione di questa ottimizzazione della memoria potrebbe danneggiare le prestazioni del 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.

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 usa HOST_NAME in una clausola di filtro ed esegue l'override del 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 di riga con parametri.
threshold Valore percentuale utilizzato per i Sottoscrittori che SQL Server Compact eseguono o versioni precedenti di SQL Server . threshold controlla 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 Replicare colonne Identity.
verify_resolver_signature 1 La firma digitale di un sistema di risoluzione personalizzato viene verificata per stabilire se l'origine è attendibile.
0 La firma digitale di un sistema di risoluzione personalizzato non viene verificata per stabilire se l'origine è attendibile.
NULL (predefinito) Restituisce l'elenco di valori supportati per la proprietà.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot Riconosce che l'azione eseguita da questo stored procedure può invalidare uno snapshot esistente. force_invalidate_snapshot è un bit, con un valore predefinito di 0.

0 specifica che le modifiche all'articolo di merge non causano l'invalido 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 indica che le modifiche apportate all'articolo di merge possono causare l'invalido dello snapshot e, se sono presenti sottoscrizioni esistenti che richiedono un nuovo snapshot, concede l'autorizzazione per l'eliminazione dello snapshot esistente come obsoleto e la generazione di un nuovo snapshot.

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 Riconosce che l'azione eseguita da questo stored procedure può richiedere la reinizializzazione delle sottoscrizioni esistenti. force_reinit_subscription è un bit, con un valore predefinito di 0.

0 specifica che le modifiche 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 all'articolo di merge causano la reinizializzazione delle sottoscrizioni esistenti e concede l'autorizzazione per la reinizializzazione della sottoscrizione.

Per ulteriori informazioni sulle proprietà che richiedono la reinizializzazione di tutte le sottoscrizioni esistenti in caso di modifica, vedere la sezione Osservazioni.

Valori del codice restituito

0 (esito positivo) o 1 (errore)

Commenti

sp_changemergearticle viene usato nella replica di tipo merge.

Poiché sp_changemergearticle viene usato per modificare le proprietà dell'articolo specificate inizialmente usando sp_addmergearticle ,vedere sp_addmergearticle per altre 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_command

  • 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

  • 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 il valore 3 per partition_options, i metadati vengono puliti ogni volta che il agente di merge viene eseguito 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 Snapshots for Merge Publications with Parameterized Filters.

Quando si imposta la proprietà column_tracking , se la tabella è già pubblicata in altre pubblicazioni di tipo merge, il rilevamento delle colonne deve corrispondere al valore 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 comporta l'applicazione della stessa modifica agli 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 schema_option usando sp_changemergearticle, le impostazioni di bit esistenti possono essere disattivate. Per mantenere le impostazioni esistenti, è necessario eseguire& (AND bit per bit) tra il valore che si sta impostando e il valore corrente di schema_option, che può essere determinato eseguendo sp_helpmergearticle .

Attenzione

Quando si eseguono molti (forse centinaia) articoli in una pubblicazione e si esegue sp_changemergearticle per uno degli articoli, il completamento dell'esecuzione potrebbe richiedere molto tempo.

Tabella delle opzioni di schema valide

La tabella seguente descrive i valori schema_option consentiti, 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, 0x0100, 0x2000, 0x40000, 0x1000000 e 0x200000
proc schema only 0x01 e 0x2000
tabella 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 [AdventureWorks2012]
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 db_owner predefinito del database possono eseguire sp_changemergearticle.

Vedere anche

Visualizzare e modificare le proprietà degli articoli
Modificare le proprietà di pubblicazioni e articoli
sp_addmergearticle (Transact-SQL)
sp_dropmergearticle (Transact-SQL)
sp_helpmergearticle (Transact-SQL)
Stored procedure per la replica (Transact-SQL)