sp_mergearticlecolumn (Transact-SQL)

Crea particiones verticales en una publicación de mezcla. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicaciones.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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 ] 

Argumentos

  • [ @publication =] 'publication'
    Es el nombre de la publicación. Publication es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @article =] 'article'
    Es el nombre del artículo de la publicación. article es de tipo sysname y no tiene ningún valor predeterminado.

  • [ @column =] 'column'
    Identifica las columnas donde se va a crear la partición vertical. column es de tipo sysname y su valor predeterminado es NULL. Si es NULL y @operation = N'add', de manera predeterminada se agregan al artículo todas las columnas de la tabla de origen. column no puede ser NULL cuando se establece operation en drop. Para excluir columnas de un artículo, ejecute sp_mergearticlecolumn y especifique column y @operation = N'drop' para cada columna que desee quitar del article especificado.

  • [ @operation =] 'operation'
    Es el estado de la réplica. operation es de tipo nvarchar(4) y su valor predeterminado es ADD. El valor add marca la columna para la replicación. El valor drop borra la columna.

  • [ @schema_replication=] 'schema_replication'
    Especifica que un cambio en el esquema se propagará al ejecutar el Agente de mezcla. schema_replication es de tipo nvarchar(5) y su valor predeterminado es FALSE.

    [!NOTA]

    Sólo se admite FALSE para schema_replication.

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    Habilita o deshabilita la posibilidad de invalidar una instantánea. force_invalidate_snapshot es de tipo bit y su valor predeterminado es 0.

    0 especifica que los cambios en el artículo de mezcla no invalidarán la instantánea.

    1 especifica que los cambios en el artículo de mezcla pueden causar la invalidación de la instantánea y, en tal caso, el valor 1 concede el permiso necesario para que se produzca la nueva instantánea.

  • [ **@force_reinit_subscription = ]**force_reinit_subscription
    Habilita o deshabilita la capacidad de reinicializar la suscripción. force_reinit_subscription es de tipo bit y su valor predeterminado es 0.

    0 especifica que los cambios en el artículo de mezcla no causarán la reinicialización de la suscripción.

    1 especifica que, al cambiar un artículo de mezcla, la suscripción se puede reinicializar y, en tal caso, el valor 1 concede el permiso necesario para que se reinicialice la suscripción.

Valores de código de retorno

0 (correcto) o 1 (error)

Notas

sp_mergearticlecolumn se utiliza en la replicación de mezcla.

No es posible quitar una columna de identidad del artículo si se está utilizando la administración automática del intervalo de identidad. Para obtener más información, vea Replicar columnas de identidad.

Si una aplicación establece una nueva partición vertical después de crear la instantánea inicial, es necesario generar una instantánea nueva y volverla a aplicar a cada suscripción. Las instantáneas se aplican al ejecutar el siguiente Agente de instantáneas, distribución o mezcla programado.

Si se utiliza el seguimiento por fila en la detección de conflictos (valor predeterminado), la tabla base puede incluir un máximo de 1024 columnas, pero en el artículo deben filtrarse las columnas de forma que se publique un máximo de 246 columnas. Si se utiliza el seguimiento por columna, la tabla base puede incluir 246 columnas como máximo. Para obtener más información, vea la sección acerca del nivel de seguimiento en el tema Cómo la replicación de mezcla detecta y resuelve conflictos.

Ejemplo

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

Permisos

Sólo los miembros de la función fija de servidor sysadmin o de la función fija de base de datos db_owner pueden ejecutar sp_mergearticlecolumn.