Vorgehensweise: Löschen eines Artikels (Replikationsprogrammierung mit Transact-SQL)

Artikel können programmgesteuert mit gespeicherten Replikationsprozeduren gelöscht werden. Die verwendeten gespeicherten Prozeduren hängen vom Typ der Veröffentlichung ab, zu der der Artikel gehört. Informationen über die Bedingungen, unter denen Artikel gelöscht werden können, und darüber, ob das Löschen eines Artikels einen neuen Snapshot oder die erneute Initialisierung der Abonnements erforderlich macht, finden Sie unter Hinzufügen und Löschen von Artikeln bei vorhandenen Veröffentlichungen.

So löschen Sie einen Artikel aus einer Snapshot- oder Transaktionsveröffentlichung

  1. Führen Sie sp_droparticle (Transact-SQL) aus, um den durch @article angegebenen Artikel von der durch @publication angegebenen Veröffentlichung zu löschen. Geben Sie den Wert 1 für @force_invalidate_snapshot an.

  2. (Optional) Um das veröffentlichte Objekt vollständig aus der Veröffentlichungsdatenbank zu löschen, führen Sie den Befehl DROP <objectname> auf dem Verleger für die Veröffentlichungsdatenbank aus.

So löschen Sie einen Artikel aus einer Mergeveröffentlichung

  1. Führen Sie sp_dropmergearticle (Transact-SQL) aus, um den durch @article angegebenen Artikel von der durch @publication angegebenen Veröffentlichung zu löschen. Geben Sie dafür, falls notwendig, den Wert 1 für @force_invalidate_snapshot und den Wert 1 für @force_reinit_subscription an.

  2. (Optional) Um das veröffentlichte Objekt vollständig aus der Datenbank zu löschen, führen Sie den Befehl DROP <objectname> auf dem Verleger für die Veröffentlichungsdatenbank aus.

Beispiel

Im folgenden Beispiel wird ein Artikel aus einer Transaktionsveröffentlichung gelöscht. Da durch diese Änderung der vorhandene Snapshot ungültig wird, wird der Wert 1 für den Parameter @force_invalidate_snapshot angegeben.

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

Im folgenden Beispiel werden zwei Artikel aus einer Mergeveröffentlichung gelöscht. Da durch diese Änderungen der vorhandene Snapshot ungültig wird, wird der Wert 1 für den Parameter @force_invalidate_snapshot angegeben.

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