Condividi tramite


sp_addmergearticle (Transact-SQL)

Si applica a: SQL Server Istanza gestita di SQL di Azure

Aggiunge un articolo a una pubblicazione di tipo merge esistente. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_addmergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    , [ @source_object = ] N'source_object'
    [ , [ @type = ] N'type' ]
    [ , [ @description = ] N'description' ]
    [ , [ @column_tracking = ] N'column_tracking' ]
    [ , [ @status = ] N'status' ]
    [ , [ @pre_creation_cmd = ] N'pre_creation_cmd' ]
    [ , [ @creation_script = ] N'creation_script' ]
    [ , [ @schema_option = ] schema_option ]
    [ , [ @subset_filterclause = ] N'subset_filterclause' ]
    [ , [ @article_resolver = ] N'article_resolver' ]
    [ , [ @resolver_info = ] N'resolver_info' ]
    [ , [ @source_owner = ] N'source_owner' ]
    [ , [ @destination_owner = ] N'destination_owner' ]
    [ , [ @vertical_partition = ] N'vertical_partition' ]
    [ , [ @auto_identity_range = ] N'auto_identity_range' ]
    [ , [ @pub_identity_range = ] pub_identity_range ]
    [ , [ @identity_range = ] identity_range ]
    [ , [ @threshold = ] threshold ]
    [ , [ @verify_resolver_signature = ] verify_resolver_signature ]
    [ , [ @destination_object = ] N'destination_object' ]
    [ , [ @allow_interactive_resolver = ] N'allow_interactive_resolver' ]
    [ , [ @fast_multicol_updateproc = ] N'fast_multicol_updateproc' ]
    [ , [ @check_permissions = ] check_permissions ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @published_in_tran_pub = ] N'published_in_tran_pub' ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection' ]
    [ , [ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution' ]
    [ , [ @partition_options = ] partition_options ]
    [ , [ @processing_order = ] processing_order ]
    [ , [ @subscriber_upload_options = ] subscriber_upload_options ]
    [ , [ @identityrangemanagementoption = ] N'identityrangemanagementoption' ]
    [ , [ @delete_tracking = ] N'delete_tracking' ]
    [ , [ @compensate_for_errors = ] N'compensate_for_errors' ]
    [ , [ @stream_blob_columns = ] N'stream_blob_columns' ]
[ ; ]

Argomenti

[ @publication = ] N'publication'

Nome della pubblicazione contenente l'articolo. @publication è sysname, senza impostazione predefinita.

[ @article = ] N'article'

Nome dell'articolo. Deve essere un nome univoco all'interno della pubblicazione. @article è sysname, senza impostazione predefinita. @article deve trovarsi nel computer locale che esegue SQL Server e deve essere conforme alle regole per gli identificatori.

[ @source_object = ] N'source_object'

Oggetto di database da pubblicare. @source_object è sysname, senza impostazione predefinita. Per altre informazioni sui tipi di oggetti che possono essere pubblicati tramite la replica di tipo merge, vedere Pubblicare dati e oggetti di database.

[ @type = ] N'type'

Tipo di articolo. @type è sysname, con un valore predefinito , tablee può essere uno dei valori seguenti.

valore Descrizione
table (predefinito) Tabella con schema e dati. La tabella viene monitorata per determinare i dati da replicare.
func schema only Funzione con solo schema.
indexed view schema only Vista indicizzata con solo schema.
proc schema only Stored procedure con solo schema.
synonym schema only Sinonimo con solo schema.
view schema only Vista con solo schema.

[ @description = ] N'description'

Descrizione dell'articolo. @description è nvarchar(255), con il valore predefinito NULL.

[ @column_tracking = ] N'column_tracking'

Impostazione per il rilevamento a livello di colonna. @column_tracking è nvarchar(10), con il valore predefinito false. false attiva il rilevamento delle colonne. false disattiva il rilevamento delle colonne e lascia il rilevamento dei conflitti a livello di riga. 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.

Nota

Se si usa il rilevamento a livello di riga per il rilevamento dei conflitti (impostazione predefinita), la tabella di base può includere fino a 1.024 colonne, che devono tuttavia essere filtrate dall'articolo in modo da pubblicare un massimo di 246 colonne. Se viene utilizzato il rilevamento a livello di colonna, nella tabella di base possono essere incluse al massimo 246 colonne.

[ @status = ] N'status'

Stato dell'articolo. @status è nvarchar(10), con un valore predefinito .unsynced Se active, viene eseguito lo script di elaborazione iniziale per pubblicare la tabella. Se unsynced, lo script di elaborazione iniziale per pubblicare la tabella viene eseguito alla successiva esecuzione del agente di snapshot.

[ @pre_creation_cmd = ] N'pre_creation_cmd'

Azione eseguita dal sistema se, quando si applica lo snapshot, la tabella esiste già nel Sottoscrittore. @pre_creation_cmd è nvarchar(10)e può essere uno dei valori seguenti.

valore Descrizione
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 (predefinito) Elimina la tabella prima di ricrearla. Obbligatorio per supportare i Sottoscrittori di SQL Server Compact.
truncate Tronca la tabella di destinazione.

[ @creation_script = ] N'creation_script'

Percorso e nome di uno script dello schema di articolo facoltativo usato per creare l'articolo nel database di sottoscrizione. @creation_script è nvarchar(255), con un valore predefinito .NULL

Nota

Gli script di creazione non vengono eseguiti nei Sottoscrittori di SQL Server Compact.

[ @schema_option = ] schema_option

Bitmap dell'opzione di generazione dello schema per l'articolo specificato. @schema_option è varbinary(8)e può essere | (OR bit per bit) prodotto di uno o più di questi valori.

valore Descrizione
0x00 Disabilita l'esecuzione di script dal agente di snapshot e usa lo script di precreazione dello schema specificato definito in @creation_script.
0x01 Genera la creazione dell'oggetto (CREATE TABLE, CREATE PROCEDUREe così via). Questo è il valore predefinito per gli articoli di stored procedure.
0x10 Genera un indice cluster corrispondente. Anche se questa opzione non è impostata, gli indici correlati alle chiavi primarie e UNIQUE ai vincoli vengono generati se sono già definiti in una tabella pubblicata.
0x20 Converte i tipi di dati definiti dall'utente (UDT) in tipi di dati di base nel Sottoscrittore. Questa opzione non può essere usata quando è presente un vincolo CHECK o DEFAULT in una colonna UDT, se una colonna definito dall'utente fa parte della chiave primaria o se una colonna calcolata fa riferimento a una colonna definita dall'utente.
0x40 Genera indici non cluster corrispondenti. Anche se questa opzione non è impostata, gli indici correlati alle chiavi primarie e UNIQUE ai vincoli vengono generati se sono già definiti in una tabella pubblicata.
0x80 Replica i PRIMARY KEY vincoli. Anche gli indici correlati al vincolo vengono replicati, anche se le opzioni 0x10 e 0x40 non sono abilitate.
0x100 Replica gli eventuali trigger dell'utente di un articolo di tabella.
0x200 Replica i FOREIGN KEY vincoli. Se la tabella a cui si fa riferimento non fa parte di una pubblicazione, tutti i FOREIGN KEY vincoli di una tabella pubblicata non vengono replicati.
0x400 Replica i CHECK vincoli.
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 i UNIQUE vincoli. Anche gli indici correlati al vincolo vengono replicati, anche se le opzioni 0x10 e 0x40 non sono abilitate.
0x8000 Questa opzione non è valida per i server di pubblicazione che eseguono SQL Server 2005 (9.x) e versioni successive.
0x10000 Replica i CHECK vincoli in NOT FOR REPLICATION modo che i vincoli non vengano applicati durante la sincronizzazione.
0x20000 Replica i FOREIGN KEY vincoli in NOT FOR REPLICATION 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 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 alle colonne xml non vengono replicate.
0x4000000 Replica gli indici nelle 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 per oggetti di grandi dimensioni (nvarchar(max), varchar(max)e varbinary(max)) introdotti in SQL Server 2005 (9.x) in tipi di dati supportati in SQL Server 2000 (8.x).
0x40000000 Replica le autorizzazioni.
0x80000000 Tenta di eliminare le dipendenze a tutti gli oggetti che non fanno parte della pubblicazione.
0x100000000 Usare questa opzione per replicare l'attributo FILESTREAM se è specificato nelle colonne varbinary(max). Non specificare questa opzione se si esegue la replica delle tabelle nei Sottoscrittori di SQL Server 2005 (9.x). La replica di tabelle con colonne FILESTREAM nei Sottoscrittori di SQL Server 2000 (8.x) non è supportata, indipendentemente dalla modalità di impostazione di questa opzione di schema. Vedere l'opzione 0x800000000correlata .
0x200000000 Converte i tipi di dati di data e ora (data, ora, datetimeoffset e datetime2) introdotti in SQL Server 2008 (10.0.x) in tipi di dati supportati nelle versioni precedenti di SQL Server.
0x400000000 Replica l'opzione di compressione per dati e indici. Per ulteriori informazioni, vedi Compressione dei dati.
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. La replica non crea 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 0x100000000correlata .
0x1000000000 Converte i tipi CLR (Common Language Runtime) definiti dall'utente (UDT) 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 riferimento al metodo del tipo di dati hierarchyid.
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 sulle colonne di tipo geography e geometry.

Se questo valore è NULL, il sistema genera automaticamente un'opzione di schema valida per l'articolo. La tabella dell'opzione Schema predefinito mostra il valore scelto in base al tipo di articolo. Inoltre, non tutti i valori @schema_option sono validi per ogni tipo di replica e tipo di articolo. La tabella opzione Schema valido mostra le opzioni che è possibile specificare per un determinato tipo di articolo.

Nota

Il parametro @schema_option influisce solo sulle opzioni di replica per lo snapshot iniziale. Dopo che lo schema iniziale è stato generato dal agente di snapshot e applicato nel Sottoscrittore, la replica dello schema di pubblicazione viene modificata nel Sottoscrittore in base alle regole di replica delle modifiche dello schema e all'impostazione del parametro @replicate_ddl specificata in sp_addmergepublication. Per altre informazioni, vedere Apportare modifiche allo schema nei database di pubblicazione.

[ @subset_filterclause = ] N'subset_filterclause'

Clausola WHERE che specifica il filtro orizzontale di un articolo di tabella senza la parola WHERE inclusa. @subset_filterclause è nvarchar(1000), con un valore predefinito di una stringa vuota.

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 e si esegue l'override del HOST_NAME valore, 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 con parametri - Filtri di riga con parametri.

[ @article_resolver = ] N'article_resolver'

Sistema di risoluzione basato su COM usato per risolvere i conflitti nell'articolo della tabella o nell'assembly .NET Framework richiamato per eseguire la logica di business personalizzata nell'articolo della tabella. @article_resolver è nvarchar(255), con un valore predefinito .NULL I valori disponibili per questo parametro sono elencati in Resolver personalizzati Microsoft. Se il valore fornito non è uno dei resolver Microsoft, SQL Server usa il resolver specificato anziché il sistema di risoluzione fornito dal sistema. Utilizzare sp_enumcustomresolvers per enumerare l'elenco dei resolver personalizzati disponibili. Per altre informazioni, vedere Eseguire la logica di business durante la sincronizzazione di tipo merge e la replica avanzata di tipo merge - Rilevamento e risoluzione dei conflitti.

[ @resolver_info = ] N'resolver_info'

Consente di specificare informazioni aggiuntive richieste da un sistema di risoluzione personalizzato. Alcuni resolver Microsoft richiedono una colonna fornita come input per il sistema di risoluzione. @resolver_info è nvarchar(517), con un valore predefinito .NULL Per altre informazioni, vedere Conflitti avanzati di replica di tipo merge - Resolver basati su COM.

[ @source_owner = ] N'source_owner'

Nome del proprietario del @source_object. @source_owner è sysname, con un valore predefinito .NULL Se NULL, si presuppone che l'utente corrente sia il proprietario.

[ @destination_owner = ] N'destination_owner'

Proprietario dell'oggetto nel database di sottoscrizione, se non dbo. @destination_owner è sysname, con un valore predefinito .NULL Se NULL, dbo si presuppone che sia il proprietario.

[ @vertical_partition = ] N'vertical_partition'

Abilita e disabilita l'applicazione di filtri alle colonne in un articolo di tabella. @vertical_partition è nvarchar(5), con il valore predefinito false.

  • false indica che non è presente alcun filtro verticale e pubblica tutte le colonne.

  • false cancella tutte le colonne ad eccezione della chiave primaria e ROWGUID delle colonne dichiarate. Le colonne vengono aggiunte tramite sp_mergearticlecolumn.

[ @auto_identity_range = ] N'auto_identity_range'

Abilita e disabilita la gestione automatica degli intervalli di valori Identity per questo articolo della tabella in una pubblicazione al momento della creazione. @auto_identity_range è nvarchar(5), con un valore predefinito .NULL false abilita la gestione automatica dell'intervallo di valori Identity, mentre false la disabilita.

Nota

Questo parametro è deprecato e viene mantenuto per la compatibilità con le versioni precedenti degli script. È consigliabile usare @identityrangemanagementoption per specificare le opzioni di gestione degli intervalli di valori Identity. Per altre informazioni, vedere Replicare colonne Identity.

[ @pub_identity_range = ] pub_identity_range

Controlla le dimensioni dell'intervallo di valori Identity allocato a un Sottoscrittore con una sottoscrizione server, quando è attivata la gestione automatica degli intervalli di valori Identity. L'intervallo di valori Identity è riservato al Sottoscrittore di ripubblicazione per l'assegnazione ai propri Sottoscrittori. @pub_identity_range è bigint, con il valore predefinito NULL. È necessario specificare questo parametro se @identityrangemanagementoption è auto o se @auto_identity_range è false.

[ @identity_range = ] identity_range

Controlla le dimensioni dell'intervallo di valori Identity assegnato al server di pubblicazione e al Sottoscrittore quando è attivata la gestione automatica degli intervalli di valori Identity. @identity_range è bigint, con il valore predefinito NULL. È necessario specificare questo parametro se @identityrangemanagementoption è auto o se @auto_identity_range è false.

Nota

@identity_range controlla le dimensioni dell'intervallo di valori Identity nei Sottoscrittori di ripubblicazione usando le versioni precedenti di SQL Server.

[ @threshold = ] soglia

Valore percentuale che determina quando l'agente di merge assegna un nuovo intervallo di valori Identity. Quando viene usata la percentuale di valori specificati in @threshold, il agente di merge crea un nuovo intervallo identity. @threshold è int, con il valore predefinito .NULL È necessario specificare questo parametro se @identityrangemanagementoption è auto o se @auto_identity_range è false.

[ @verify_resolver_signature = ] verify_resolver_signature

Specifica se una firma digitale viene verificata prima dell'utilizzo di un sistema di risoluzione nella replica di tipo merge. @verify_resolver_signature è int, con il valore predefinito 1.

  • 0 specifica che la firma non è verificata.

  • 1 specifica che la firma viene verificata per verificare se proviene da un'origine attendibile.

[ @destination_object = ] N'destination_object'

Nome dell'oggetto nel database di sottoscrizione. @destination_object è sysname, con un valore predefinito di quello che si trova in @source_object. È possibile specificare questo parametro solo se l'articolo include solo lo schema, come nel caso di stored procedure, viste e funzioni definite dall'utente. Se l'articolo specificato è un articolo di tabella, il valore in @source_object sostituisce il valore in @destination_object.

[ @allow_interactive_resolver = ] N'allow_interactive_resolver'

Abilita o disabilita l'utilizzo del sistema di risoluzione interattivo in un articolo. @allow_interactive_resolver è nvarchar(5), con il valore predefinito false. false abilita l'uso del sistema di risoluzione interattivo nell'articolo; false la disabilita.

Nota

Il sistema di risoluzione interattivo non è supportato dai Sottoscrittori di SQL Server Compact.

[ @fast_multicol_updateproc = ] N'fast_multicol_updateproc'

Questo parametro è deprecato e viene mantenuto per la compatibilità con le versioni precedenti degli script.

[ @check_permissions = ] check_permissions

Bitmap delle autorizzazioni a livello di tabella verificate quando il agente di merge applica le modifiche al server di pubblicazione. Se l'account di accesso/utente del server di pubblicazione usato dal processo di merge non dispone delle autorizzazioni corrette per la tabella, le modifiche non valide vengono registrate come conflitti. @check_permissions è int e può essere | (OR bit per bit) prodotto di uno o più dei valori seguenti.

valore Descrizione
0x00 (predefinito) Le autorizzazioni non vengono controllate.
0x10 Le autorizzazioni vengono controllate nel server di pubblicazione prima di consentire il caricamento delle operazioni di inserimento eseguite nel Sottoscrittore.
0x20 Le autorizzazioni vengono controllate nel server di pubblicazione prima di consentire il caricamento delle operazioni di aggiornamento eseguite nel Sottoscrittore.
0x40 Le autorizzazioni vengono controllate nel server di pubblicazione prima di consentire il caricamento delle operazioni di eliminazione eseguite nel Sottoscrittore.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Segnala che l'azione eseguita da questa stored procedure potrebbe invalidare uno snapshot esistente. @force_invalidate_snapshot è bit, con il valore predefinito 0.

  • 0 specifica che l'aggiunta di un articolo non causa l'invalidità 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 specifica che l'aggiunta di un articolo potrebbe causare l'invalidità dello snapshot e, se sono presenti sottoscrizioni esistenti che richiedono un nuovo snapshot, concede l'autorizzazione per contrassegnare lo snapshot esistente come obsoleto e un nuovo snapshot generato. @force_invalidate_snapshot è impostato su 1 quando si aggiunge un articolo a una pubblicazione con uno snapshot esistente.

[ @published_in_tran_pub = ] N'published_in_tran_pub'

Indica che un articolo in una pubblicazione di tipo merge viene pubblicato anche in una pubblicazione transazionale. @published_in_tran_pub è nvarchar(5), con il valore predefinito false. false specifica che l'articolo viene pubblicato anche in una pubblicazione transazionale.

[ @force_reinit_subscription = ] force_reinit_subscription

Segnala che l'azione eseguita dalla stored procedure potrebbe richiedere la reinizializzazione delle sottoscrizioni esistenti. @force_reinit_subscription è bit, con un valore predefinito .0

  • 0 specifica che l'aggiunta di un articolo non comporta la reinizializzazione della sottoscrizione. Se la stored procedure rileva che la modifica richiede la reinizializzazione delle sottoscrizioni esistenti, si verifica un errore e non vengono apportate modifiche.

  • 1 significa che le modifiche apportate all'articolo di merge causano la reinizializzazione delle sottoscrizioni esistenti e concede l'autorizzazione per la reinizializzazione della sottoscrizione. @force_reinit_subscription è impostato su 1 quando @subset_filterclause specifica un filtro di riga con parametri.

[ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection'

Specifica il livello di rilevamento dei conflitti per un articolo membro di un record logico. @logical_record_level_conflict_detection è nvarchar(5), con il valore predefinito false.

  • false specifica che viene rilevato un conflitto se vengono apportate modifiche in qualsiasi punto del record logico.

  • false specifica che il rilevamento dei conflitti predefinito viene utilizzato come specificato da @column_tracking. Per altre informazioni, vedere Raggruppare modifiche alle righe correlate con record logici.

Nota

Poiché i record logici non sono supportati dai Sottoscrittori di SQL Server Compact, è necessario specificare il valore per false @logical_record_level_conflict_detection per supportare questi Sottoscrittori.

[ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution'

Specifica il livello di risoluzione dei conflitti per un articolo membro di un record logico. @logical_record_level_conflict_resolution è nvarchar(5), con il valore predefinito false.

  • false specifica che l'intero record logico vincente sovrascrive il record logico perso.

  • false specifica che le righe vincenti non sono vincolate al record logico.

Se @logical_record_level_conflict_detection è false, è necessario impostare anche @logical_record_level_conflict_resolution su false. Per altre informazioni, vedere Raggruppare modifiche alle righe correlate con record logici.

Nota

Poiché i record logici non sono supportati dai Sottoscrittori di SQL Server Compact, è necessario specificare il valore per false @logical_record_level_conflict_resolution per supportare questi Sottoscrittori.

[ @partition_options = ] partition_options

Definisce il modo in cui vengono partizionati i dati nell'articolo. Ciò consente di ottimizzare le prestazioni se tutte le righe appartengono a un'unica partizione o a un'unica sottoscrizione. @partition_options è tinyint e può essere uno dei valori seguenti.

valore Descrizione
0 (predefinito) Il filtro per l'articolo è statico o non produce un subset univoco di dati per ogni partizione, ovvero una partizione "sovrapposta".
1 Le partizioni sono sovrapposte e gli aggiornamenti DML (Data Manipulation Language) 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 la tabella di origine per un articolo è già pubblicata in un'altra pubblicazione, il valore di @partition_options deve essere lo stesso per entrambi gli articoli.

[ @processing_order = ] processing_order

Indica l'ordine di elaborazione degli articoli in una pubblicazione di tipo merge. @processing_order è int, con il valore predefinito 0. 0 specifica che l'articolo non è ordinato e qualsiasi altro valore rappresenta il valore ordinale dell'ordine di elaborazione per questo articolo. Gli articoli vengono elaborati in ordine crescente in base al valore. Se due articoli hanno lo stesso valore, l'ordine di elaborazione viene determinato dall'ordine del nome alternativo dell'articolo nella tabella di sistema sysmergearticles . Per altre informazioni, vedere Specificare le proprietà della replica di tipo merge.

[ @subscriber_upload_options = ] subscriber_upload_options

Specifica le restrizioni per gli aggiornamenti eseguiti in un Sottoscrittore con una sottoscrizione client. Per altre informazioni, vedere Ottimizzare le prestazioni della replica di tipo merge con gli articoli di solo download. @subscriber_upload_options è tinyint e può essere uno dei valori seguenti.

valore Descrizione
0 (predefinito) Nessuna restrizione. Le modifiche eseguite nel Sottoscrittore vengono caricate nel server di pubblicazione.
1 Le modifiche sono consentite nel Sottoscrittore, ma non vengono caricate nel server di pubblicazione.
2 Le modifiche non sono consentite nel Sottoscrittore.

Per modificare @subscriber_upload_options è necessario reinizializzare la sottoscrizione chiamando sp_reinitmergepullsubscription.

Nota

Se la tabella di origine di un articolo è già inclusa in un'altra pubblicazione, il valore di @subscriber_upload_options deve coincidere per entrambi gli articoli.

[ @identityrangemanagementoption = ] N'identityrangemanagementoption'

Specifica la modalità di gestione degli intervalli di valori Identity per l'articolo. @identityrangemanagementoption è nvarchar(10)e può essere uno dei valori seguenti.

valore Descrizione
none Disabilita la gestione degli intervalli di valori Identity.
manual Contrassegna la colonna Identity con NOT FOR REPLICATION per consentire la gestione manuale degli intervalli di valori Identity.
auto Imposta la gestione automatica degli intervalli di valori Identity.
NULL (predefinito) L'impostazione predefinita è none quando il valore di @auto_identity_range non trueè .

Per la compatibilità con le versioni precedenti, quando il valore di @identityrangemanagementoption è NULL, viene controllato il valore di @auto_identity_range . Tuttavia, quando il valore di @identityrangemanagementoption non NULLè , il valore di @auto_identity_range viene ignorato. Per altre informazioni, vedere Replicare colonne Identity.

[ @delete_tracking = ] N'delete_tracking'

Indica se viene eseguita la replica delle eliminazioni. @delete_tracking è nvarchar(5), con il valore predefinito true. false indica che le eliminazioni non vengono replicate e true indica che le eliminazioni vengono replicate, ovvero il comportamento consueto per la replica di tipo merge. Quando @delete_tracking è impostato su false, le righe eliminate nel Sottoscrittore devono essere rimosse manualmente nel server di pubblicazione e le righe eliminate nel server di pubblicazione devono essere rimosse manualmente nel Sottoscrittore.

Importante

L'impostazione di @delete_tracking su false comporta la mancata convergenza. Se la tabella di origine per un articolo è già pubblicata in un'altra pubblicazione, il valore di @delete_tracking deve essere lo stesso per entrambi gli articoli.

Nota

@delete_tracking opzioni non possono essere impostate utilizzando la Creazione guidata nuova pubblicazione o la finestra di dialogo Proprietà pubblicazione.

[ @compensate_for_errors = ] N'compensate_for_errors'

Specifica se devono essere eseguite azioni di compensazione quando vengono rilevati errori durante la sincronizzazione. @compensate_for_errors è nvarchar(5), con un valore predefinito .false Se impostato su true, le modifiche che non possono essere applicate a un Sottoscrittore o a un server di pubblicazione durante la sincronizzazione comportano sempre l'annullamento delle azioni di compensazione della modifica. Tuttavia, un Sottoscrittore configurato in modo non corretto che genera un errore può causare l'annullamento delle modifiche in altri Sottoscrittori e server di pubblicazione. false disabilita queste azioni di compensazione, tuttavia, gli errori vengono comunque registrati come con compensazione e le operazioni di unione successive continuano a tentare di applicare le modifiche fino a quando non vengono eseguite correttamente.

Importante

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 per un articolo è già pubblicata in un'altra pubblicazione, il valore di @compensate_for_errors deve essere lo stesso per entrambi gli articoli.

[ @stream_blob_columns = ] N'stream_blob_columns'

Specifica se viene utilizzata l'ottimizzazione del flusso di dati per la replica di colonne BLOB (Binary Large Object). @stream_blob_columns è nvarchar(5), con il valore predefinito false. true significa che verrà tentata l'ottimizzazione. @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 della tabella FILESTREAM a non usare il flusso BLOB, usare sp_changemergearticle per impostare @stream_blob_columns su false.

Importante

L'abilitazione di questa ottimizzazione della memoria potrebbe ridurre le prestazioni del agente di merge durante la sincronizzazione. È consigliabile utilizzare questa opzione solo se vengono replicate colonne contenenti più megabyte di dati.

Nota

Alcune funzionalità di replica di tipo merge, ad esempio i record logici, possono comunque impedire l'uso dell'ottimizzazione del flusso durante la replica di oggetti binari di grandi dimensioni anche con @stream_blob_columns impostata su true.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_addmergearticle viene usato nella replica di tipo merge.

Quando si pubblicano gli oggetti, nei Sottoscrittori vengono copiate le relative definizioni. Se si pubblica un oggetto di database che dipende da uno o più oggetti, è necessario pubblicare tutti gli oggetti a cui si fa riferimento. Se ad esempio si pubblica una vista che dipende da una tabella, sarà necessario pubblicare anche la tabella.

Se si specifica un valore per 3 @partition_options:

  • In tale articolo può essere presente una sola sottoscrizione per ogni partizione di dati. 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.

  • I metadati vengono puliti ogni volta che viene eseguito il agente di merge 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 Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri.

Se si aggiunge un articolo con un filtro orizzontale statico, utilizzando @subset_filterclause, a una pubblicazione esistente con articoli con filtri con parametri, è necessario reinizializzare le sottoscrizioni.

Quando si specifica @processing_order, è consigliabile lasciare spazi vuoti tra i valori dell'ordine degli articoli, semplificando così l'impostazione di nuovi valori in futuro. Ad esempio, se sono presenti tre articoli, Article1, Article2e Article3, impostare @processing_order su 10, 20e 30, anziché 1, 2e 3. Per altre informazioni, vedere Specificare le proprietà della replica di tipo merge.

Tabella delle opzioni dello schema predefinita

Questa tabella descrive il valore predefinito impostato dalla stored procedure, se viene specificato un NULL valore per @schema_option, che dipende dal tipo di articolo.

Tipo di articolo Valore delle opzioni di schema
func schema only 0x01
indexed view schema only 0x01
proc schema only 0x01
table 0x0C034FD1 - SQL Server 2005 (9.x) e pubblicazioni compatibili con versioni successive con uno snapshot in modalità nativa.

0x08034FF1 - SQL Server 2005 (9.x) e pubblicazioni compatibili con versioni successive con uno snapshot in modalità carattere.
view schema only 0x01

Nota

Se la pubblicazione supporta versioni precedenti di SQL Server, l'opzione dello schema predefinita per table è 0x30034FF1.

Tabella delle opzioni dello schema valida

Nella tabella seguente vengono descritti i valori consentiti @schema_option 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, , 0x20000x40000, , 0x1000000, e 0x01000x200000
proc schema only 0x01 e 0x2000
table Tutte le opzioni.
view schema only 0x01, 0x040, , 0x20000x40000, , 0x1000000, e 0x01000x200000

Esempi

DECLARE @publication AS sysname;
DECLARE @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @table1 = N'Employee'; 
SET @table2 = N'SalesOrderHeader'; 
SET @table3 = N'SalesOrderDetail'; 
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';

-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table1, 
  @source_object = @table1, 
  @type = N'table', 
  @source_owner = @hrschema,
  @schema_option = 0x0004CF1,
  @description = N'article for the Employee table',
  @subset_filterclause = @filterclause;

-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @source_object = @table2, 
  @type = N'table', 
  @source_owner = @salesschema, 
  @vertical_partition = N'true',
  @schema_option = 0x0034EF1,
  @description = N'article for the SalesOrderDetail table';

-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle 
  @publication = @publication, 
  @article = @table3, 
  @source_object = @table3, 
  @source_owner = @salesschema,
  @description = 'article for the SalesOrderHeader table', 
  @identityrangemanagementoption = N'auto', 
  @pub_identity_range = 100000, 
  @identity_range = 100, 
  @threshold = 80,
  @schema_option = 0x0004EF1;

-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn 
  @publication = @publication, 
  @article = @table2, 
  @column = N'CreditCardApprovalCode', 
  @operation = N'drop', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table2, 
  @filtername = N'SalesOrderHeader_Employee', 
  @join_articlename = @table1, 
  @join_filterclause = N'Employee.BusinessEntityID = SalesOrderHeader.SalesPersonID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter 
  @publication = @publication, 
  @article = @table3, 
  @filtername = N'SalesOrderDetail_SalesOrderHeader', 
  @join_articlename = @table2, 
  @join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID', 
  @join_unique_key = 1, 
  @filter_type = 1, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;
GO

Autorizzazioni

È richiesta l'appartenenza al ruolo predefinito del server sysadmin o al ruolo predefinito del database db_owner .