Partager via


Procédure : supprimer un article (programmation Transact-SQL de la réplication)

Les articles peuvent être supprimés par programme en utilisant des procédures stockées de réplication. Les procédures stockées utilisées dépendent du type de publication auquel l'article appartient. Pour plus d'informations sur les conditions dans lesquelles un article peut être supprimé et pour savoir si la suppression d'un article requiert une nouvelle capture instantanée ou la réinitialisation des abonnements, consultez Ajout et suppression d'articles de publications existantes.

Pour supprimer un article d'une publication transactionnelle ou de capture instantanée

  1. Exécutez sp_droparticle (Transact-SQL) pour supprimer un article spécifié par @article d'une publication spécifiée par @publication. Affectez la valeur 1 à @force_invalidate_snapshot.

  2. (Facultatif) Pour supprimer entièrement l'objet publié de la base de données, exécutez la commande DROP <objectname> au niveau du serveur de publication dans la base de données de publication.

Pour supprimer un article d'une publication de fusion

  1. Exécutez sp_dropmergearticle (Transact-SQL) pour supprimer un article spécifié par @article d'une publication spécifiée par @publication. Si nécessaire, affectez la valeur 1 à @force_invalidate_snapshot et la valeur 1 à @force_reinit_subscription.

  2. (Facultatif) Pour supprimer entièrement l'objet publié de la base de données, exécutez la commande DROP <objectname> au niveau du serveur de publication dans la base de données de publication.

Exemple

L'exemple suivant supprime un article d'une publication transactionnelle. Dans la mesure où cette modification invalide la capture instantanée existante, la valeur 1 est affectée au paramètre @force_invalidate_snapshot.

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @article = N'Product'; 

-- Drop the transactional article.
USE [AdventureWorks]
EXEC sp_droparticle 
  @publication = @publication, 
  @article = @article,
  @force_invalidate_snapshot = 1;
GO

L'exemple suivant supprime deux articles d'une publication de fusion. Dans la mesure où ces modifications invalident la capture instantanée existante, la valeur 1 est affectée au paramètre @force_invalidate_snapshot spécifié.

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()';

-- Drop the merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_dropmergefilter 
  @publication = @publication, 
  @article = @table3, 
  @filtername = N'SalesOrderDetail_SalesOrderHeader', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Drops the merge join filter between Employee and SalesOrderHeader.
EXEC sp_dropmergefilter 
  @publication = @publication, 
  @article = @table2, 
  @filtername = N'SalesOrderHeader_Employee', 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Drops the article for the SalesOrderDetail table.
EXEC sp_dropmergearticle 
  @publication = @publication, 
  @article = @table3,
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Drops the article for the SalesOrderHeader table.
EXEC sp_dropmergearticle 
  @publication = @publication, 
  @article = @table2, 
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;

-- Drops the article for the Employee table.
EXEC sp_dropmergearticle 
  @publication = @publication, 
  @article = @table1,
  @force_invalidate_snapshot = 1, 
  @force_reinit_subscription = 1;
GO

DECLARE @publication AS sysname;
DECLARE @article1 AS sysname;
DECLARE @article2 AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article1 = N'SalesOrderDetail'; 
SET @article2 = N'SalesOrderHeader'; 

-- Remove articles from a merge publication.
USE [AdventureWorks]
EXEC sp_dropmergearticle 
  @publication = @publication, 
  @article = @article1,
  @force_invalidate_snapshot = 1;
EXEC sp_dropmergearticle 
  @publication = @publication, 
  @article = @article2,
  @force_invalidate_snapshot = 1;
GO