Condividi tramite


sp_mergearticlecolumn (Transact-SQL)

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 argomentoConvenzioni 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 e non prevede alcun valore predefinito.

  • [ @article =] 'article'
    Nome dell'articolo della pubblicazione. article è di tipo sysname e non prevede alcun valore predefinito.

  • [ @column =] 'column'
    Identifica le colonne su cui creare la partizione verticale. column è di tipo 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. column non può essere NULL quando operation è impostato su drop. Per escludere alcune colonne da un articolo, eseguire sp_mergearticlecolumn e specificare column e @operation = N'drop' per ogni colonna da rimuovere dall'articolo specificato in article.

  • [ @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 le modifiche dello schema verranno propagate quando verrà eseguito l'agente di merge. schema_replication è di tipo nvarchar(5) e il valore predefinito è FALSE.

    [!NOTA]

    L'unico valore supportato per schema_replication è FALSE.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Attiva o disattiva la funzionalità che consente di invalidare uno snapshot. force_invalidate_snapshot è di tipo bit e il valore predefinito è 0.

    Il valore 0 indica che le modifiche apportate all'articolo di merge non invalidano lo snapshot.

    Il valore 1 indica che le modifiche apportate all'articolo di merge possono invalidare lo snapshot e, in tal caso, consente di eseguire il nuovo snapshot.

  • [ **@force_reinit_subscription = ]**force_reinit_subscription
    Attiva o disattiva la funzionalità che consente di reinizializzare la sottoscrizione. force_reinit_subscription è di tipo bit e il valore predefinito è 0.

    Il valore 0 indica che le modifiche apportate all'articolo di merge non causano la reinizializzazione della sottoscrizione.

    Il valore 1 indica che le modifiche apportate all'articolo di merge possono causare la reinizializzazione della sottoscrizione e, in tal caso, consente di eseguire la reinizializzazione della sottoscrizione.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

sp_mergearticlecolumn viene utilizzata per la replica di tipo merge.

Non è possibile eliminare una colonna Identity dall'articolo se viene utilizzata la gestione automatica degli intervalli di valori Identity. Per ulteriori informazioni, vedere Replica di 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, la tabella di base può includere fino a 246 colonne. Per ulteriori informazioni, vedere la sezione relativa al livello di rilevamento in Modalità di rilevamento e risoluzione dei conflitti da parte della replica di tipo merge.

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.EmployeeID = 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 ruolo predefinito del database db_owner possono eseguire sp_mergearticlecolumn.