Löschen eines Artikels

In diesem Thema wird beschrieben, wie Sie einen Artikel in SQL Server 2014 mithilfe von Transact-SQL oder Replikationsverwaltungsobjekten (Replication Management Objects, RMO) löschen. 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.

Verwenden 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 einen durch @article angegebenen Artikel aus einer durch @publication angegebenen Veröffentlichung zu löschen. Geben Sie für @force_invalidate_snapshot den Wert 1an.

  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 einen durch @article angegebenen Artikel aus einer durch @publication angegebenen Veröffentlichung zu löschen. Geben Sie bei Bedarf 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 diese Änderung den vorhandenen Momentaufnahme ungültig macht, wird für den parameter @force_invalidate_snapshot der Wert 1 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 diese Änderungen die vorhandene Momentaufnahme ungültig werden, wird für den Parameter @force_invalidate_snapshot der Wert 1 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

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, PublicationNameund 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, PublicationNameund 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.

Weitere Informationen

Hinzufügen und Löschen von Artikeln aus vorhandenen Veröffentlichungen
Replication System Stored Procedures Concepts