sp_mergearticlecolumn (Transact-SQL)

S’applique à :SQL Server

Partitionne une publication de fusion verticalement. Cette procédure stockée est exécutée sur le serveur de publication dans la base de données de publication.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @publication = ] N’publication'

Nom de la publication. @publication est sysname, sans valeur par défaut.

[ @article = ] N’article'

Nom de l’article dans la composition. @article est sysname, sans valeur par défaut.

[ @column = ] N’column'

Identifie les colonnes sur lesquelles la partition verticale doit être créée. @column est sysname, avec la valeur par défaut NULL. Si NULL et @operation est défini addsur , toutes les colonnes de la table source sont ajoutées à l’article par défaut. @column ne peut pas être NULL lorsque @operation est défini sur drop. Pour exclure les colonnes d’un article, exécutez sp_mergearticlecolumn et spécifiez @column, puis définissez @operation la valeur sur drop laquelle chaque colonne doit être supprimée du @article spécifié.

[ @operation = ] N’operation'

État de réplication. @operation est nvarchar(4), avec la valeur par défaut add.

  • add marque la colonne pour la réplication.
  • drop efface la colonne.

[ @schema_replication = ] N’schema_replication'

Spécifie qu’une modification de schéma est propagée lors de l’exécution du Agent de fusion. @schema_replication est nvarchar(5), avec la valeur par défaut false.

Seul false le @schema_replication est pris en charge.

[ @force_invalidate_snapshot = ] force_invalidate_instantané

Active ou désactive la possibilité d'invalider un instantané. @force_invalidate_instantané est bit, avec la valeur par défaut 0.

  • 0spécifie que les modifications apportées à l’article de fusion n’entraînent pas l’instantané non valide.

  • 1spécifie que les modifications apportées à l’article de fusion peuvent entraîner l’instantané non valide et, si c’est le cas, une valeur d’autorisation pour 1 la nouvelle instantané se produit.

[ @force_reinit_subscription = ] force_reinit_subscription

Active ou désactive la possibilité de réinitialiser l’abonnement. @force_reinit_subscription est bit, avec la valeur par défaut 0.

  • 0 spécifie que les modifications apportées à l’article de fusion n’entraînent pas la réinitialisation de l’abonnement.

  • 1 spécifie que les modifications apportées à l’article de fusion peuvent entraîner la réinitialisation de l’abonnement et, si c’est le cas, une valeur d’autorisation de réinitialisation de 1 l’abonnement se produit.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Notes

sp_mergearticlecolumn est utilisé dans la réplication de fusion.

Une colonne d’identité ne peut pas être supprimée de l’article si la gestion automatique des plages d’identités est utilisée. Pour plus d’informations, consultez Répliquer des colonnes d’identité.

Si une application définit une nouvelle partition verticale après la création de l'instantané initial, un nouvel instantané doit être généré et réappliqué à chaque abonnement. Les instantanés sont appliqués lors de l'exécution de l'instantané planifié suivant et de l'Agent de distribution ou de fusion.

Si le suivi de lignes est utilisé pour la détection de conflits (valeur par défaut), la table de base peut inclure 1 024 colonnes au maximum, mais les colonnes doivent être filtrées à partir de l'article afin que 246 colonnes au maximum soient publiées. Si le suivi de colonnes est utilisé, la table de base peut inclure 246 colonnes au maximum.

Exemples

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

Autorisations

Seuls les membres du rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe peuvent s’exécuter sp_mergearticlecolumn.