sp_mergearticlecolumn (Transact-SQL)

Se aplica a:SQL Server

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

Convenciones de sintaxis de Transact-SQL

Sintaxis

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 ]
[ ; ]

Argumentos

[ @publication = ] N'publication'

Nombre de la publicación. @publication es sysname, sin ningún valor predeterminado.

[ @article = ] N'article'

Nombre del artículo de la publicación. @article es sysname, sin ningún valor predeterminado.

[ @column = ] N'column'

Identifica las columnas donde se va a crear la partición vertical. @column es sysname, con un valor predeterminado de NULL. Si NULL y @operation se establecen adden , todas las columnas de la tabla de origen se agregan al artículo de forma predeterminada. @column no puede ser NULL cuando @operation está establecido dropen . Para excluir columnas de un artículo, ejecute sp_mergearticlecolumn y especifique @column y establezca @operation en drop para cada columna que se va a quitar del @article especificado.

[ @operation = ] N'operation'

Estado de replicación. @operation es nvarchar(4), con un valor predeterminado de add.

  • add marca la columna para la replicación.
  • drop borra la columna.

[ @schema_replication = ] N'schema_replication'

Especifica que se propaga un cambio de esquema cuando se ejecuta el Agente de mezcla. @schema_replication es nvarchar(5), con un valor predeterminado de false.

Solo false se admite para @schema_replication.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Habilita o deshabilita la capacidad de que se invalide una instantánea. @force_invalidate_snapshot es bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo de combinación no hacen que la instantánea no sea válida.

  • 1 especifica que los cambios realizados en el artículo de combinación pueden hacer que la instantánea no sea válida y, si es así, se concede permiso 1 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 bit, con un valor predeterminado de 0.

  • 0 especifica que los cambios realizados en el artículo de combinación no hacen que se reinicialice la suscripción.

  • 1 especifica que los cambios realizados en el artículo de combinación pueden hacer que se reinicialice la suscripción y, si es así, se concede permiso 1 para que se produzca la reinicialización de la suscripción.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

sp_mergearticlecolumn se usa en la replicación de mezcla.

No se puede quitar una columna de identidad del artículo si se usa la administración automática de intervalos de identidades. Para 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.

Ejemplos

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

Permisos

Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_mergearticlecolumn.