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 , table
e 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 PROCEDURE e 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 0x800000000 correlata . |
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 0x100000000 correlata . |
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 eROWGUID
delle colonne dichiarate. Le colonne vengono aggiunte tramitesp_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 su1
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 su1
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 (Transact-SQL).
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
, Article2
e Article3
, impostare @processing_order su 10
, 20
e 30
, anziché 1
, 2
e 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 , , 0x2000 0x40000 , , 0x1000000 , e 0x0100 0x200000 |
proc schema only |
0x01 e 0x2000 |
table |
Tutte le opzioni. |
view schema only |
0x01 , 0x040 , , 0x2000 0x40000 , , 0x1000000 , e 0x0100 0x200000 |
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 .