sp_changearticle (Transact-SQL)

Modifica le proprietà di un articolo in una pubblicazione transazionale o snapshot. 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_changearticle [ [@publication= ] 'publication' ]
    [ , [ @article= ] 'article' ]
    [ , [ @property= ] 'property' ]
    [ , [ @value= ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] 'publisher' ]

Argomenti

  • [ @publication=] 'publication'
    Nome della pubblicazione contenente l'articolo. publication è di tipo sysname e il valore predefinito è NULL.

  • [ @article=] 'article'
    Nome dell'articolo di cui modificare la proprietà. article è di tipo sysname e il valore predefinito è NULL.

  • [ @property=] 'property'
    Proprietà dell'articolo da modificare. property è di tipo nvarchar(100).

  • [ @value=] 'value'
    Nuovo valore della proprietà dell'articolo. value è di tipo nvarchar(255).

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

    Proprietà

    Valori

    Descrizione

    creation_script

     

    Percorso e nome di uno script di schema dell'articolo utilizzato per la creazione delle tabelle di destinazione. Il valore predefinito è NULL.

    del_cmd

     

    Istruzione DELETE da eseguire. In alternativa, viene creata dal log.

    description

     

    Nuova voce descrittiva per l'articolo.

    dest_object

     

    Disponibile per compatibilità con le versioni precedenti. Utilizzare dest_table.

    dest_table

     

    Nuova tabella di destinazione.

    destination_owner

     

    Proprietario dell'oggetto di destinazione.

    filter

     

    Nuova stored procedure da utilizzare per filtrare la tabella in modo orizzontale. Il valore predefinito è NULL. Non può essere modificato per le pubblicazioni nella replica peer-to-peer.

    fire_triggers_on_snapshot

    true

    I trigger utente replicati vengono eseguiti quando si applica lo snapshot iniziale.

    NotaNota
    Per consentire la replica dei trigger, è necessario che la maschera di bit di schema_option includa il valore 0x100.

     

    false

    I trigger utente replicati non vengono eseguiti quando si applica lo snapshot iniziale.

    identity_range

     

    Controlla le dimensioni degli intervalli di valori Identity assegnati nel Sottoscrittore. Non supportato per la replica peer-to-peer.

    ins_cmd

     

    Istruzione INSERT da eseguire. In alternativa, viene creata dal log.

    pre_creation_cmd

    Comando preliminare per eliminare, rimuovere o troncare la tabella di destinazione prima della sincronizzazione.

     

    none

    Non utilizza alcun comando.

     

    drop

    Rimuove la tabella di destinazione.

     

    delete

    Elimina la tabella di destinazione.

     

    truncate

    Tronca la tabella di destinazione.

    pub_identity_range

     

    Controlla le dimensioni degli intervalli di valori Identity assegnati nel Sottoscrittore. Non supportato per la replica peer-to-peer.

    schema_option

    Specifica la mappa di bit dell'opzione di generazione dello schema per l'articolo specificato. schema_option è di tipo binary(8). Per ulteriori informazioni, vedere la sezione Osservazioni di seguito in questo argomento.

     

    0x00

    Disattiva la creazione di script eseguita dall'agente snapshot.

     

    0x01

    Genera le istruzioni per la creazione di oggetti (CREATE TABLE, CREATE PROCEDURE e così via).

     

    0x02

    Genera le stored procedure che propagano le eventuali modifiche per l'articolo.

     

    0x04

    Gli script per le colonne Identity vengono creati tramite la proprietà IDENTITY.

     

    0x08

    Replica le colonne di tipo timestamp. Se non si imposta questo valore, le colonne timestamp vengono replicate come binary.

     

    0x10

    Genera un indice cluster corrispondente.

     

    0x20

    Converte i tipi di dati definiti dall'utente (UDT) in tipi di dati di base nel Sottoscrittore. Questa opzione non può essere utilizzata quando è presente un vincolo CHECK o DEFAULT su una colonna UDT, se una colonna UDT è inclusa nella chiave primaria o se una colonna calcolata fa riferimento a una colonna UDT. Non supportato per i server di pubblicazione Oracle.

     

    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

    Replica come vincoli la chiave primaria e le chiavi univoche di un articolo di tabella tramite istruzioni ALTER TABLE.

    NotaNota
    Questa opzione è obsoleta. Utilizzare in alternativa 0x80 e 0x4000.

     

    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

    Associazioni predefinite

     

    0x800000

    Associazioni regola

     

    0x1000000

    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 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 con dimensioni maggiori di 8000 byte 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.

    0x20000000000

    Replica l'attributo SPARSE per le colonne. Per ulteriori informazioni su questo attributo, vedere Utilizzo di colonne di tipo sparse.

    status

    Nuovo stato della proprietà.

     

    dts horizontal partitions

    Identificato solo a scopo informativo. Non supportato. Non è garantita la compatibilità con le versioni future.

     

    include column names

    I nomi delle colonne sono inclusi nell'istruzione INSERT replicata.

     

    no column names

    I nomi delle colonne non sono inclusi nell'istruzione INSERT replicata.

     

    no dts horizontal partitions

    La partizione orizzontale per l'articolo non è definita da una sottoscrizione trasformabile.

     

    none

    Deseleziona tutte le opzioni relative allo stato nella tabella sysarticles e contrassegna l'articolo come inattivo.

     

    parameters

    Le modifiche vengono propagate al Sottoscrittore tramite i comandi con parametri. Questa è l'impostazione predefinita per un nuovo articolo.

     

    string literals

    Le modifiche vengono propagate al Sottoscrittore tramite i valori letterali stringa.

    sync_object

     

    Nome della tabella o vista utilizzata per generare un file di output di sincronizzazione. Il valore predefinito è NULL. Non supportato per i server di pubblicazione Oracle.

    tablespace

    Identifica lo spazio tabella utilizzato dalla tabella di registrazione per un articolo pubblicato da un database Oracle. Per ulteriori informazioni, vedere Gestione di spazi di tabella Oracle.

    threshold

     

    Valore percentuale che controlla quando l'agente di distribuzione assegna un nuovo intervallo di valori Identity. Non supportato per la replica peer-to-peer.

    type

     

    Non supportato per i server di pubblicazione Oracle.

     

    logbased

    Articolo basato su un log.

     

    logbased manualboth

    Articolo basato su log con filtro manuale e vista manuale. Per utilizzare questa opzione è inoltre necessario impostare le proprietà sync_object e filter. Non supportato per i server di pubblicazione Oracle.

     

    logbased manualfilter

    Articolo basato su log con filtro manuale. Per utilizzare questa opzione è inoltre necessario impostare le proprietà sync_object e filter. Non supportato per i server di pubblicazione Oracle.

     

    logbased manualview

    Articolo basato su log con vista manuale. Per utilizzare questa opzione è inoltre necessario impostare la proprietà sync_object. Non supportato per i server di pubblicazione Oracle.

     

    indexed viewlogbased

    Articolo di vista indicizzata basato su log. Non supportato per i server di pubblicazione Oracle. Per questo tipo di articolo non è necessario pubblicare separatamente la tabella di base.

     

    indexed viewlogbased manualboth

    Articolo di vista indicizzata basato su log con filtro manuale e vista manuale. Per utilizzare questa opzione è inoltre necessario impostare le proprietà sync_object e filter. Per questo tipo di articolo non è necessario pubblicare separatamente la tabella di base. Non supportato per i server di pubblicazione Oracle.

     

    indexed viewlogbased manualfilter

    Articolo di vista indicizzata basato su log con filtro manuale. Per utilizzare questa opzione è inoltre necessario impostare le proprietà sync_object e filter. Per questo tipo di articolo non è necessario pubblicare separatamente la tabella di base. Non supportato per i server di pubblicazione Oracle.

     

    indexed viewlogbased manualview

    Articolo di vista indicizzata basato su log con vista manuale. Per utilizzare questa opzione è inoltre necessario impostare la proprietà sync_object. Per questo tipo di articolo non è necessario pubblicare separatamente la tabella di base. Non supportato per i server di pubblicazione Oracle.

    upd_cmd

     

    Istruzione UPDATE da eseguire. In alternativa, viene creata dal log.

    NULL

    NULL

    Restituisce un elenco di proprietà dell'articolo che è possibile modificare.

  • [ @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 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 specifica che le modifiche apportate all'articolo 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, se modificate, richiedono la generazione di un nuovo snapshot, 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 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 comportano la reinizializzazione delle sottoscrizioni esistenti e consente la reinizializzazione.

    Per informazioni sulle proprietà che, se modificate, richiedono la generazione di un nuovo snapshot, vedere la sezione Osservazioni.

  • [ @publisher= ] 'publisher'
    Specifica un server di pubblicazione non SQL Server. publisher è di tipo sysname e il valore predefinito è NULL.

    [!NOTA]

    Non utilizzare l'argomento publisher quando si modificano le proprietà dell'articolo in un server di pubblicazione SQL Server.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

La stored procedure sp_changearticle viene utilizzata in repliche snapshot e transazionali.

Quando un articolo appartiene a una pubblicazione che supporta la replica transazionale peer-to-peer, è possibile modificare solo le proprietà description, ins_cmd, upd_cmd e del_cmd.

La modifica di una delle proprietà seguenti richiede la generazione di un nuovo snapshot ed è necessario specificare il valore 1 per il parametro force_invalidate_snapshot:

  • del_cmd

  • dest_table

  • destination_owner

  • ins_cmd

  • pre_creation_cmd

  • schema_options

  • upd_cmd

La modifica di una delle proprietà seguenti richiede la reinizializzazione delle sottoscrizioni esistenti ed è necessario specificare un valore 1 per il parametro force_reinit_subscription.

  • del_cmd

  • dest_table

  • destination_owner

  • filter

  • ins_cmd

  • status

  • upd_cmd

All'interno di una pubblicazione esistente è possibile modificare un determinato articolo tramite sp_changearticle senza dover eliminare e ricreare l'intera pubblicazione.

[!NOTA]

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 tramite sp_changearticle, è possibile che le impostazioni di bit esistenti vengano 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_helparticle.

Opzioni di schema valide

Nella tabella seguente vengono descritti i valori consentiti di schema_option in base ai tipi di replica (indicati nella prima riga) e al tipo di articolo (indicato nella prima colonna).

Tipo di articolo

Tipo di replica

 

 

Transazionale

Snapshot

logbased

Tutte le opzioni

Tutte le opzioni tranne 0x02

logbased manualfilter

Tutte le opzioni

Tutte le opzioni tranne 0x02

logbased manualview

Tutte le opzioni

Tutte le opzioni tranne 0x02

indexed view logbased

Tutte le opzioni

Tutte le opzioni tranne 0x02

indexed view logbased manualfilter

Tutte le opzioni

Tutte le opzioni tranne 0x02

indexed view logbased manualview

Tutte le opzioni

Tutte le opzioni tranne 0x02

indexed view logbase manualboth

Tutte le opzioni

Tutte le opzioni tranne 0x02

proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

serializable proc exec

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

proc schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 e 0x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 e 0x80000000

func schema only

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

0x01, 0x20, 0x2000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x10000000, 0x20000000, 0x40000000 e 0x80000000

indexed view schema only

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 e 0x80000000

0x01, 0x010, 0x020, 0x040, 0x0100, 0x2000, 0x40000, 0x100000, 0x200000, 0x400000, 0x800000, 0x2000000, 0x8000000, 0x40000000 e 0x80000000

[!NOTA]

Per pubblicazioni ad aggiornamento in coda, è necessario attivare il valore 0x80 di schema_option. I valori di schema_option supportati per le pubblicazioni non SQL Server sono i seguenti: 0x01, 0x02, 0x10, 0x40, 0x80, 0x1000 e 0x4000.

Esempio

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));

-- Change the schema options to replicate schema with XML.
USE [AdventureWorks]
EXEC sp_changearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'schema_option', 
  @value = @option,
  @force_invalidate_snapshot = 1;
GO

Autorizzazioni

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