sp_mergearticlecolumn (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate)

Suddivide una pubblicazione di tipo merge in partizioni verticali. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

  
sp_mergearticlecolumn [ @publication = ] 'publication'  
        , [ @article = ] 'article'  
    [ , [ @column = ] 'column'  
    [ , [ @operation = ] 'operation'   
    [ , [ @schema_replication = ] 'schema_replication' ]  
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]   
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]   

Argomenti

[ @publication = ] 'publication' Nome della pubblicazione. Publication è di tipo sysname, senza alcun valore predefinito.

[ @article = ] 'article' Nome dell'articolo nella pubblicazione. article è sysname, senza alcun valore predefinito.

[ @column = ] 'column' Identifica le colonne in cui creare la partizione verticale. column è sysname e il valore predefinito è NULL. Se NULL e @operation = N'add', per impostazione predefinita all'articolo vengono aggiunte tutte le colonne della tabella di origine. La colonna non può essere NULL quando l'operazione è impostata per l'eliminazione di. Per escludere colonne da un articolo, eseguire sp_mergearticlecolumn e specificare la colonna e per ogni colonna da rimuovere @operation = N'drop' dall'articolo specificato.

[ @operation = ] 'operation' Stato della replica. operation è di tipo nvarchar(4) e il valore predefinito è ADD. add contrassegna la colonna per la replica. drop cancella la colonna.

[ @schema_replication = ] 'schema_replication' Specifica che una modifica dello schema verrà propagata durante l'esecuzione agente di merge schema. schema_replication è di tipo nvarchar(5), con valore predefinito FALSE.

Nota

Solo FALSE è supportato per schema_replication.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot Abilita o disabilita la possibilità di invalidare uno snapshot. force_invalidate_snapshot è un bit, con un valore predefinito di 0.

0 specifica che le modifiche apportate all'articolo di merge non causeranno l'invalido dello snapshot.

1 specifica che le modifiche all'articolo di merge possono causare l'invalida dello snapshot e, in tal caso, il valore 1 concede l'autorizzazione per l'esecuzione del nuovo snapshot.

[ @force_reinit_subscription = ]force_reinit_subscription_ Abilita o disabilita la possibilità di reinizializzazione della sottoscrizione. force_reinit_subscription è un bit con il valore predefinito 0.

0 specifica che le modifiche apportate all'articolo di merge non causeranno la reinizializzazione della sottoscrizione.

1 specifica che le modifiche all'articolo di merge possono causare la reinizializzazione della sottoscrizione e, in tal caso, il valore 1 concede l'autorizzazione per la reinizializzazione della sottoscrizione.

Valori del codice restituito

0 (esito positivo) o 1 (esito negativo)

Commenti

sp_mergearticlecolumn utilizzato nella replica di tipo merge.

Non è possibile eliminare una colonna Identity dall'articolo se viene utilizzata la gestione automatica degli intervalli di valori Identity. Per altre informazioni, vedere Replicare colonne Identity.

Se un'applicazione imposta una nuova partizione verticale dopo la creazione dello snapshot iniziale, è necessario generare un nuovo snapshot e riassociarlo a ogni sottoscrizione. Gli snapshot vengono associati alla successiva esecuzione pianificata dell'agente snapshot e di distribuzione o di merge.

Se si utilizza 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.

Esempio

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

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

Vedere anche

Definizione e modifica di un filtro di join tra articoli di merge
Definizione e modifica di un filtro di riga con parametri per un articolo di merge
Filtrare i dati pubblicati
Stored procedure per la replica (Transact-SQL)