Condividi tramite


sp_repladdcolumn (Transact-SQL)

Aggiunge una colonna a un articolo di tabella esistente che è stato pubblicato. È possibile aggiungere la nuova colonna in tutti i server di pubblicazione che pubblicano la tabella specificata oppure solo in una pubblicazione specifica della tabella. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Nota importanteImportante

Questa stored procedure è obsoleta e viene supportata solo per motivi di compatibilità con le versioni precedenti. È consigliabile utilizzarla solo con server di pubblicazione Microsoft SQL Server 2000 e Sottoscrittori di ripubblicazione SQL Server 2000. Questa stored procedure non deve essere utilizzata nelle colonne con tipi di dati introdotti in SQL Server 2005 o SQL Server 2008.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_repladdcolumn [ @source_object = ] 'source_object', [ @column = ] 'column' ]
    [ , [ @typetext = ] 'typetext' ]
    [ , [ @publication_to_add = ] 'publication_to_add' ]
    [ , [ @from_agent = ] from_agent ]
    [ , [ @schema_change_script = ] 'schema_change_script' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]

Argomenti

  • [ @source_object =] 'source_object'
    Nome dell'articolo di tabella che contiene la nuova colonna da aggiungere. source_object è di tipo nvarchar(358) e non prevede alcun valore predefinito.

  • [ @column =] 'column'
    Nome della colonna della tabella da aggiungere per la replica. column è di tipo sysname e non prevede alcun valore predefinito.

  • [ @typetext =] 'typetext'
    Definizione della colonna da aggiungere. typetext è di tipo nvarchar(3000) e non prevede alcun valore predefinito. Se ad esempio si desidera aggiungere la colonna order_filled che è un campo a carattere singolo (non NULL) il cui valore predefinito è N, order_filled verrà utilizzato come parametro column, mentre la definizione della colonna, ovvero char(1) NOT NULL CONSTRAINT nome_vincolo DEFAULT 'N', verrà utilizzata come valore del parametro typetext.

  • [ @publication_to_add =] 'publication_to_add'
    Nome della pubblicazione cui si desidera aggiungere la nuova colonna. publication_to_add è di tipo nvarchar(4000) e il valore predefinito è ALL. Se il valore è ALL, la colonna viene aggiunta a tutte le pubblicazioni contenenti la tabella. Se viene specificato publication_to_add, la colonna viene aggiunta solo nella pubblicazione specificata.

  • [ @from_agent = ] from_agent
    Specifica se la stored procedure viene eseguita da un agente di replica. from_agent è di tipo int e il valore predefinito è 0. Il valore 1 viene utilizzato quando la stored procedure viene eseguita da un agente di replica. In tutti gli altri casi è consigliabile utilizzare il valore predefinito 0.

  • [ @schema_change_script =] 'schema_change_script'
    Specifica il nome e il percorso di uno script di SQL Server utilizzato per modificare le stored procedure personalizzate generate dal sistema. schema_change_script è di tipo nvarchar(4000) e il valore predefinito è NULL. La replica consente di sostituire una o più procedure predefinite utilizzate per la replica transazionale con stored procedure personalizzate definite dall'utente. schema_change_script viene eseguito dopo una modifica dello schema in un articolo di tabella replicato utilizzando sp_repladdcolumn e consente di eseguire una delle operazioni seguenti:

    • Se le stored procedure personalizzate vengono rigenerate automaticamente, è possibile utilizzare schema_change_script per eliminare le stored procedure personalizzate e sostituirle con stored procedure personalizzate definite dall'utente che supportano il nuovo schema.

    • Se le stored procedure personalizzate non vengono rigenerate automaticamente, è possibile utilizzare schema_change_scriptper rigenerarle o per creare stored procedure personalizzate definite dall'utente.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Abilita o disabilita la funzionalità che consente di invalidare uno snapshot. force_invalidate_snapshot è di tipo bit e il valore predefinito è 1.

    Il valore 1 indica che le modifiche apportate all'articolo possono invalidare lo snapshot. In tal caso, il valore 1 consente l'esecuzione del nuovo snapshot.

    0 specifica che le modifiche apportate all'articolo non invalidano lo snapshot.

  • [ @force_reinit_subscription = ] force_reinit_subscription
    Abilita o disabilita la funzionalità che consente di reinizializzare la sottoscrizione. force_reinit_subscription è di tipo bit e il valore predefinito è 0.

    Il valore 0 indica che le modifiche apportate all'articolo non causano la reinizializzazione della sottoscrizione.

    1 specifica che le modifiche apportate all'articolo possono causare la reinizializzazione della sottoscrizione. In tal caso, il valore 1 consente la reinizializzazione della sottoscrizione.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

La stored procedure sp_repladdcolumn è obsoleta ed è disponibile solo per garantire la compatibilità con le versioni precedenti. Per aggiungere una colonna a un articolo di tabella replicato è consigliabile eseguire i comandi DDL (Data Definition Language) sulla tabella pubblicata. Se la replica DDL è attivata, i comandi DDL vengono replicati automaticamente durante la replica. Per ulteriori informazioni, vedere Modifiche allo schema nei database di pubblicazione.

sp_repladdcolumn è ancora necessaria durante la propagazione delle modifiche DDL dai Sottoscrittori di ripubblicazione in esecuzione in una versione precedente dei Sottoscrittori di SQL Server 2000.

La stored procedure sp_repladdcolumn viene utilizzata per tutti i tipi di replica.

Quando si utilizza sp_repladdcolumn e si apporta una modifica allo schema di un articolo che appartiene a una pubblicazione che utilizza un pacchetto Data Transformation Services (DTS), tale modifica non viene propagata al Sottoscrittore e le procedure personalizzate per INSERT/UPDATE/DELETE non vengono rigenerate nei Sottoscrittori. È quindi necessario rigenerare il pacchetto DTS manualmente e apportare la modifica di schema corrispondente nei Sottoscrittori. Se non si esegue l'aggiornamento dello schema, l'agente di distribuzione potrebbe non applicare le modifiche successive. Prima di modificare uno schema, verificare che non esista alcuna transazione in sospeso da recapitare.

Quando al parametro typetext viene assegnato un valore predefinito che è una funzione non deterministica, ad esempio 'datetime not null default getdate()', l'aggiunta della nuova colonna può impedire la convergenza perché richiede l'esecuzione della funzione nel Sottoscrittore per il caricamento di un valore predefinito nella colonna.

Si noti che alle colonne timestamp e calcolate viene applicato un filtro per escludere le pubblicazioni in modalità carattere. Se si aggiunge una colonna timestamp o calcolata tramite sp_repladdcolumn, la nuova colonna non viene inviata alle sottoscrizioni di tali pubblicazioni.

Nota importanteImportante

Dopo l'esecuzione di sp_repladdcolumn, è necessario eseguire un backup del database di pubblicazione. Se non si esegue questa operazione, dopo il ripristino del database di pubblicazione può verificarsi un errore del processo di merge.

Autorizzazioni

Solo i membri del ruolo predefinito del server sysadmin e del ruolo predefinito del database db_owner possono eseguire sp_repladdcolumn.