sp_changemergearticle (Transact-SQL)
Si applica a: SQL Server
Vengono modificate le proprietà di un articolo di tipo merge. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sp_changemergearticle
[ @publication = ] N'publication'
, [ @article = ] N'article'
[ , [ @property = ] N'property' ]
[ , [ @value = ] N'value' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]
Argomenti
[ @publication = ] N'publication'
Nome della pubblicazione in cui è presente l'articolo. @publication è sysname, senza impostazione predefinita.
[ @article = ] N'article'
Nome dell'articolo da modificare. @article è sysname, senza impostazione predefinita.
[ @property = ] N'property'
Proprietà da modificare per l'articolo e la pubblicazione specificati. @property è sysname e può essere uno dei valori elencati nella tabella seguente.
[ @value = ] N'value'
Nuovo valore della proprietà specificata. @value è nvarchar(2000)e può essere uno dei valori elencati nella tabella seguente.
Nella tabella seguente vengono descritte le proprietà degli articoli e i valori corrispondenti.
Proprietà | Valori | Descrizione |
---|---|---|
allow_interactive_resolver |
true |
Abilita l'utilizzo di un sistema di risoluzione interattivo per l'articolo. |
false |
Disabilita l'utilizzo di un sistema di risoluzione interattivo per l'articolo. | |
article_resolver |
Sistema di risoluzione personalizzato per l'articolo. Proprietà valida solo per gli articoli di tabelle. | |
check_permissions (bitmap) |
0x00 |
Le autorizzazioni a livello di tabella non vengono controllate. |
0x10 |
Le autorizzazioni a livello di tabella vengono controllate nel server di pubblicazione prima dell'applicazione nel server di pubblicazione delle istruzioni INSERT eseguite nel Sottoscrittore. | |
0x20 |
Le autorizzazioni a livello di tabella vengono controllate nel server di pubblicazione prima dell'applicazione nel server di pubblicazione delle istruzioni UPDATE eseguite nel Sottoscrittore. | |
0x40 |
Le autorizzazioni a livello di tabella vengono controllate nel server di pubblicazione prima dell'applicazione nel server di pubblicazione delle istruzioni DELETE eseguite nel Sottoscrittore. | |
column_tracking |
true |
Attiva il rilevamento a livello di colonna. Proprietà valida solo per gli articoli di tabelle. Nota: non è possibile usare il rilevamento a livello di colonna durante la pubblicazione di tabelle con più di 246 colonne. |
false |
Disattiva il rilevamento a livello di colonna e mantiene il rilevamento dei conflitti a livello di riga. Proprietà valida solo per gli articoli di tabelle. | |
compensate_for_errors |
true |
Vengono eseguite azioni di compensazione quando si verificano errori durante la sincronizzazione. Per altre informazioni, vedere sp_addmergearticle. |
false |
Le azioni di compensazione non vengono eseguite, ovvero il comportamento predefinito. Per altre informazioni, vedere sp_addmergearticle. Importante: anche se i dati nelle righe interessate potrebbero sembrare non convergenti, non appena si risovono errori, è possibile applicare modifiche e convergere i 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. |
|
creation_script |
Percorso e nome di uno script di schema dell'articolo facoltativo utilizzato per la creazione dell'articolo nel database di sottoscrizione. | |
delete_tracking |
true |
Le istruzioni DELETE vengono replicate, situazione corrispondente al funzionamento predefinito. |
false |
Le istruzioni DELETE non vengono replicate. Importante: è necessario rimuovere manualmente l'impostazione delete_tracking di per false ottenere la mancata convergenza dei risultati e le righe eliminate. |
|
description |
Voce descrittiva per l'articolo. | |
destination_owner |
Nome del proprietario dell'oggetto nel database di sottoscrizione, se non dbo. | |
identity_range |
bigint che specifica le dimensioni dell'intervallo da usare quando si assegnano nuovi valori Identity se l'articolo è identityrangemanagementoption impostato su auto o auto_identity_range impostato su true . Proprietà valida solo per gli articoli di tabelle. Per altre informazioni, vedere la sezione "Replica di tipo merge" di Replica colonne Identity. |
|
identityrangemanagementoption |
manual |
Disabilita la gestione automatica degli intervalli di valori Identity. Contrassegna le colonne Identity con NOT FOR REPLICATION per consentire la gestione manuale degli intervalli di valori Identity. Per altre informazioni, vedere Replicare colonne Identity. |
none |
Disabilita tutti i tipi di gestione degli intervalli di valori Identity. | |
logical_record_level_conflict_detection |
true |
Viene rilevato un conflitto in presenza di modifiche apportate in qualsiasi posizione del record logico. Richiede che logical_record_level_conflict_resolution sia impostato su true . |
false |
Il rilevamento dei conflitti predefinito viene usato come specificato da column_tracking . |
|
logical_record_level_conflict_resolution |
true |
L'intero record logico prevalente sovrascrive il record logico perdente. |
false |
Le righe vincenti non sono vincolate al record logico. | |
partition_options |
0 |
Il filtro per l'articolo è statico o non produce un subset univoco di dati per ogni partizione, ovvero una partizione "sovrapposta". |
1 |
Le partizioni si sovrappongono e gli aggiornamenti DML eseguiti nel Sottoscrittore non possono modificare la partizione a cui appartiene una riga. | |
2 |
Il filtro applicato all'articolo restituisce partizioni non sovrapposte, ma più Sottoscrittori possono ricevere la stessa partizione. | |
3 |
Il filtro applicato all'articolo restituisce partizioni non sovrapposte univoche per ogni sottoscrizione. Nota: se si specifica un valore di 3 per partition_options , può essere presente una sola sottoscrizione per ogni partizione di dati in tale articolo. Se viene creata una seconda sottoscrizione, in cui il criterio di filtro della nuova sottoscrizione viene risolto nella stessa partizione della sottoscrizione esistente, la sottoscrizione esistente viene eliminata. |
|
pre_creation_command |
none |
Se la tabella esiste già nel Sottoscrittore, non viene eseguita alcuna azione. |
delete |
Esegue un'operazione di eliminazione in base alla clausola WHERE del filtro di subset. | |
drop |
Elimina la tabella prima di ricrearla. | |
truncate |
Tronca la tabella di destinazione. | |
processing_order |
int che indica l'ordine di elaborazione degli articoli in una pubblicazione di tipo merge. | |
pub_identity_range |
bigint che specifica le dimensioni dell'intervallo allocate a un Sottoscrittore con una sottoscrizione server se l'articolo è identityrangemanagementoption impostato su auto o auto_identity_range impostato su true . L'intervallo di valori Identity è riservato al Sottoscrittore di ripubblicazione per l'assegnazione ai propri Sottoscrittori. Proprietà valida solo per gli articoli di tabelle. Per altre informazioni, vedere la sezione "Replica di tipo merge" di Replica colonne Identity. |
|
published_in_tran_pub |
true |
L'articolo è pubblicato anche in una pubblicazione transazionale. |
false |
L'articolo non viene pubblicato anche in una pubblicazione transazionale. | |
resolver_info |
Specifica le informazioni aggiuntive necessarie per un sistema di risoluzione personalizzato. Alcuni resolver Microsoft richiedono una colonna fornita come input per il sistema di risoluzione. resolver_info è nvarchar(255), con un valore predefinito .NULL Per altre informazioni, vedere Conflitti avanzati di replica di tipo merge - Resolver basati su COM. |
|
schema_option (bitmap) |
Per altre informazioni, vedere la sezione Osservazioni. | |
0x00 |
Disabilita lo scripting dal agente di snapshot e usa lo script fornito in creation_script . |
|
0x01 |
Genera lo script per la creazione di oggetti (CREATE TABLE, CREATE PROCEDURE e così via). | |
0x10 |
Genera un indice cluster corrispondente. | |
0x20 |
Converte i tipi di dati definiti dall'utente in tipi di dati di base nel Sottoscrittore. Questa opzione non può essere usata quando è presente un vincolo CHECK o DEFAULT in una colonna di tipo definito dall'utente (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. | |
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 a cui si fa riferimento non fa parte di una pubblicazione, tutti i vincoli FOREIGN KEY di una tabella pubblicata non vengono replicati. | |
0x400 |
Replica i vincoli CHECK. | |
0x800 |
Replica i valori predefiniti. | |
0x1000 |
Replica le regole di confronto a livello di colonna. | |
0x2000 |
Replica le proprietà estese associate all'oggetto di origine dell'articolo pubblicato. | |
0x4000 |
Replica le eventuali chiavi univoche definite in un articolo di tabella. | |
0x8000 |
Genera istruzioni ALTER TABLE per la creazione di script dei vincoli. | |
0x10000 |
Replica i vincoli CHECK come NOT FOR REPLICATION in modo che i vincoli non vengano applicati durante la sincronizzazione. | |
0x20000 |
Replica i vincoli FOREIGN KEY come NOT FOR REPLICATION in modo che i vincoli non vengano applicati durante la sincronizzazione. | |
0x40000 |
Replica i filegroup associati a una tabella o un indice partizionato. | |
0x80000 |
Replica lo schema di partizione per una tabella partizionata. | |
0x100000 |
Replica lo schema di partizione per un indice partizionato. | |
0x200000 |
Replica le statistiche 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 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 |
Tentare 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 (date, time, 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. | |
NULL |
Il sistema genera automaticamente un'opzione di schema valida per l'articolo. | |
status |
active |
Viene eseguito lo script di elaborazione iniziale per la pubblicazione della tabella. |
unsynced |
Lo script di elaborazione iniziale per la pubblicazione della tabella viene eseguito in occasione della successiva esecuzione dell'agente snapshot. | |
stream_blob_columns |
true |
Viene utilizzata l'ottimizzazione del flusso di dati per la replica di colonne BLOB. Tuttavia, alcune funzionalità della replica di tipo merge, come i record logici, potrebbero impedire l'utilizzo dell'ottimizzazione del flusso. 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, impostare su stream_blob_columns false.Importante: l'abilitazione di questa ottimizzazione della memoria potrebbe compromettere le prestazioni del agente di merge durante la sincronizzazione. È consigliabile utilizzare questa opzione solo se vengono replicate colonne contenenti più megabyte di dati. |
false |
L'ottimizzazione non viene usata durante la replica di colonne di oggetti binari di grandi dimensioni. | |
subscriber_upload_options |
0 |
Nessuna restrizione per gli aggiornamenti eseguiti in un Sottoscrittore con una sottoscrizione client. Le modifiche vengono caricate nel server di pubblicazione. La modifica di questa proprietà potrebbe richiedere la reinizializzazione dei Sottoscrittori esistenti. |
1 |
Le modifiche sono consentite in un Sottoscrittore con una sottoscrizione client, ma non vengono caricate nel server di pubblicazione. | |
2 |
Le modifiche non sono consentite in un Sottoscrittore con una sottoscrizione client. | |
subset_filterclause |
Clausola WHERE che specifica il filtro orizzontale. Proprietà valida solo per gli articoli di tabelle. 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 utilizza HOST_NAME in una clausola di filtro e si esegue l'override del valore HOST_NAME, 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. |
|
threshold |
Valore percentuale usato per i Sottoscrittori che eseguono SQL Server Compact o versioni precedenti di SQL Server. threshold controlla quando il agente di merge assegna un nuovo intervallo di valori Identity. Quando viene utilizzata la percentuale di valori specificata in threshold, l'agente di merge crea un nuovo intervallo di valori Identity. Utilizzato quando identityrangemanagementoption è impostato su auto o auto_identity_range è impostato su true . Proprietà valida solo per gli articoli di tabelle. Per altre informazioni, vedere la sezione "Replica di tipo merge" di Replica colonne Identity. |
|
verify_resolver_signature |
1 |
La firma digitale in un sistema di risoluzione personalizzato viene verificata per determinare se proviene da un'origine attendibile. |
0 |
La firma digitale in un sistema di risoluzione personalizzato non viene verificata per determinare se proviene da un'origine attendibile. | |
NULL (predefinito) |
Restituisce l'elenco dei valori supportati per @property. |
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
Segnala che l'azione eseguita da questa stored procedure potrebbe invalidare uno snapshot esistente. @force_invalidate_snapshot è bit, con il valore predefinito 0
.
0
specifica che le modifiche apportate all'articolo di merge non causano 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
significa che le modifiche apportate all'articolo di merge potrebbero 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.
Vedere la sezione Osservazioni per le proprietà che, quando modificate, richiedono la generazione di un nuovo snapshot.
[ @force_reinit_subscription = ] force_reinit_subscription
Segnala che l'azione eseguita dalla stored procedure potrebbe richiedere la reinizializzazione delle sottoscrizioni esistenti. @force_reinit_subscription è bit, con un valore predefinito .0
0
specifica che le modifiche apportate all'articolo di merge non causano la reinizializzazione della sottoscrizione. Se la stored procedure rileva che la modifica richiede la reinizializzazione delle sottoscrizioni esistenti, viene generato un errore e non viene apportata alcuna modifica.1
significa che le modifiche apportate all'articolo di merge causano la reinizializzazione delle sottoscrizioni esistenti e concede l'autorizzazione per la reinizializzazione della sottoscrizione.
Vedere la sezione Osservazioni per le proprietà che, quando modificate, richiedono la reinizializzazione di tutte le sottoscrizioni esistenti.
Valori del codice restituito
0
(esito positivo) o 1
(errore).
Osservazioni:
sp_changemergearticle
viene usato nella replica di tipo merge.
Poiché sp_changemergearticle
viene usato per modificare le proprietà dell'articolo specificate inizialmente tramite sp_addmergearticle, fare riferimento a sp_addmergearticle per altre informazioni su queste proprietà.
Per modificare le proprietà seguenti è necessario che venga generato un nuovo snapshot ed è necessario specificare un valore per 1
il parametro @force_invalidate_snapshot :
check_permissions
column_tracking
destination_owner
pre_creation_command
schema_options
subset_filterclause
Per modificare le proprietà seguenti è necessario reinizializzare le sottoscrizioni esistenti ed è necessario specificare un valore per 1
il parametro @force_reinit_subscription :
check_permissions
column_tracking
destination_owner
pre_creation_command
identityrangemanagementoption
subscriber_upload_options
subset_filterclause
creation_script
schema_option
logical_record_level_conflict_detection
logical_record_level_conflict_resolution
Quando si specifica un valore per 3
partition_options
, 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.
Quando si imposta la column_tracking
proprietà , se la tabella è già pubblicata in altre pubblicazioni di tipo merge, il rilevamento delle colonne deve corrispondere al valore utilizzato dagli articoli esistenti in base a questa tabella. Questo parametro è disponibile solo per gli articoli di tabelle.
Se più pubblicazioni pubblicano articoli basati sulla stessa tabella sottostante, la modifica della delete_tracking
proprietà o della compensate_for_errors
proprietà per un articolo comporta l'applicazione della stessa modifica agli altri articoli basati sulla stessa tabella.
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.
Quando si modifica il valore di schema_option
, il sistema non esegue un aggiornamento bit per bit. Ciò significa che quando si impostano schema_option
le sp_changemergearticle
impostazioni di bit esistenti potrebbero essere disattivate. Per mantenere le impostazioni esistenti, è necessario eseguire e (AND bit per bit) tra il valore impostato e il valore corrente di schema_option
, che può essere determinato eseguendo sp_helpmergearticle.
Attenzione
Quando si eseguono molti articoli (ad esempio centinaia) di articoli in una pubblicazione e si esegue sp_changemergearticle
per uno degli articoli, potrebbe essere necessario molto tempo per completare l'esecuzione.
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 @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';
-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks2022]
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property = N'column_tracking',
@value = N'true',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
Autorizzazioni
Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_changemergearticle
.