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.

Icona di collegamento a un argomentoConvenzioni 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 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

    Disattiva 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.

    NotaNota
    Il 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.

    Nota importanteImportante
    Anche 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.

    Nota importanteImportante
    L'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

    Disattiva 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

    Disattiva 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.

    NotaNota
    Se 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

    Disattiva 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 i trigger utente su un articolo di tabella, se definiti.

     

    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 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 di tabella.

     

    0x400000

    Replica le associazioni predefinite.

     

    0x800000

    Replica le associazioni di regole.

     

    0x1000000

    Replica l'indice full-text.

     

    0x2000000

    Le raccolte di schemi XML associate a colonne xml non vengono replicate.

     

    0x4000000

    Replica gli indici su colonne xml.

     

    0x8000000

    Crea gli eventuali 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

    Esegue un tentativo di rimozione delle dipendenze dagli 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) così 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 impedire l'utilizzo dell'ottimizzazione del flusso.

    Nota importanteImportante
    L'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.

    Nota importanteImportante
    Per 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 SP1 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.

    Vedere la sezione Osservazioni per informazioni sulle proprietà che in caso di modifica 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 è 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 [AdventureWorks]
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.