Löschen eines Artikels

In diesem Thema wird beschrieben, wie ein Artikel in SQL Server 2012 mit Transact-SQL oder Replikationsverwaltungsobjekten (RMO) gelöscht wird. Informationen über die Bedingungen, unter denen Artikel gelöscht werden können, und darüber, ob das Löschen eines Artikels eine neue Momentaufnahme oder die erneute Initialisierung der Abonnements erforderlich macht, finden Sie unter Hinzufügen und Löschen von Artikeln aus vorhandenen Veröffentlichungen.

In diesem Thema

  • So löschen Sie einen Artikel mit:

    Transact-SQL

    Replikationsverwaltungsobjekte (RMO)

Verwendung von 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.

So löschen Sie einen Artikel aus einer Momentaufnahme- 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 Veröffentlichungsdatenbank zu löschen, führen Sie den Befehl DROP <objectname> auf dem Verleger für die Veröffentlichungsdatenbank aus.

Beispiele (Transact-SQL)

Im folgenden Beispiel wird ein Artikel aus einer Transaktionsveröffentlichung gelöscht. Da durch diese Änderung die vorhandene Momentaufnahme 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 [AdventureWorks2012]
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 die vorhandene Momentaufnahme ungültig wird, wird der Wert 1 für den Parameter @force_invalidate_snapshot angegeben.

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

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

Pfeilsymbol, dass mit dem Link "Zurück zum Anfang" verwendet wird[Top]

Verwenden von Replikationsverwaltungsobjekten (RMO)

Sie können Artikel mithilfe von Replikationsverwaltungsobjekten (RMO) programmgesteuert löschen. Welche RMO-Klassen Sie zum Löschen eines Artikels verwenden, hängt vom Typ der Veröffentlichung ab, zu der der Artikel gehört.

So löschen Sie einen Artikel, der zu einer Momentaufnahme- oder Transaktionsveröffentlichung gehört

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection-Klasse verwenden.

  2. Erstellen Sie eine Instanz der TransArticle-Klasse.

  3. Legen Sie die Eigenschaften Name, PublicationName und DatabaseName fest.

  4. Legen Sie die Verbindung aus Schritt 1 für die ConnectionContext-Eigenschaft fest.

  5. Überprüfen Sie die IsExistingObject-Eigenschaft, um festzustellen, ob der Artikel vorhanden ist. Wenn der Wert dieser Eigenschaft false lautet, wurden entweder die Artikeleigenschaften in Schritt 3 falsch definiert, oder der Artikel ist nicht vorhanden.

  6. Rufen Sie die Remove-Methode auf.

  7. Trennen Sie alle Verbindungen.

So löschen Sie einen Artikel, der zu einer Mergeveröffentlichung gehört

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection-Klasse verwenden.

  2. Erstellen Sie eine Instanz der MergeArticle-Klasse.

  3. Legen Sie die Eigenschaften Name, PublicationName und DatabaseName fest.

  4. Legen Sie die Verbindung aus Schritt 1 für die ConnectionContext-Eigenschaft fest.

  5. Überprüfen Sie die IsExistingObject-Eigenschaft, um festzustellen, ob der Artikel vorhanden ist. Wenn der Wert dieser Eigenschaft false lautet, wurden entweder die Artikeleigenschaften in Schritt 3 falsch definiert, oder der Artikel ist nicht vorhanden.

  6. Rufen Sie die Remove-Methode auf.

  7. Trennen Sie alle Verbindungen.

Pfeilsymbol, dass mit dem Link "Zurück zum Anfang" verwendet wird[Top]

Siehe auch

Konzepte

Hinzufügen und Löschen von Artikeln aus vorhandenen Veröffentlichungen

Konzepte für gespeicherte Systemprozeduren für die Replikation