sp_mergearticlecolumn (Transact-SQL)

Si applica a:SQL Server

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

Convenzioni di sintassi Transact-SQL

Sintassi

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

Argomenti

[ @publication = ] N'publication'

Nome della pubblicazione. @publication è sysname, senza impostazione predefinita.

[ @article = ] N'article'

Nome dell'articolo nella pubblicazione. @article è sysname, senza impostazione predefinita.

[ @column = ] N'column'

Identifica le colonne su cui creare la partizione verticale. @column è sysname, con un valore predefinito .NULL Se NULL e @operation è impostato su add, tutte le colonne della tabella di origine vengono aggiunte all'articolo per impostazione predefinita. @column non può essere NULL quando @operation è impostato su drop. Per escludere colonne da un articolo, eseguire sp_mergearticlecolumn e specificare @column e impostare su @operationdrop per ogni colonna da rimuovere dal @article specificato.

[ @operation = ] N'operation'

Stato della replica. @operation è nvarchar(4), con il valore predefinito add.

  • add contrassegna la colonna per la replica.
  • drop cancella la colonna.

[ @schema_replication = ] N'schema_replication'

Specifica che una modifica dello schema viene propagata quando viene eseguita la agente di merge. @schema_replication è nvarchar(5), con il valore predefinito false.

È supportato solo false per @schema_replication.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Abilita o disabilita la funzionalità che consente di invalidare uno snapshot. @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.

  • 1 specifica che le modifiche apportate all'articolo di merge potrebbero causare l'invalidità dello snapshot e, in tal caso, un valore di 1 concede l'autorizzazione per il nuovo snapshot.

[ @force_reinit_subscription = ] force_reinit_subscription

Abilita o disabilita la possibilità di reinizializzare la sottoscrizione. @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.

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

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

sp_mergearticlecolumn viene usato nella replica di tipo merge.

Non è possibile eliminare una colonna Identity dall'articolo se viene usata 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 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.

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

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