Freigeben über


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 zu den Bedingungen, unter denen Artikel gelöscht werden können und ob für das Ablegen eines Artikels eine neue Momentaufnahme oder die Neuiniialisierung von Abonnements erforderlich ist, finden Sie unter Hinzufügen von Artikeln zu und Ablegen von Artikeln aus vorhandenen Publikationen.

Verwenden von Transact-SQL

Artikel können programmgesteuert mithilfe gespeicherter Replikationsprozeduren gelöscht werden. Die gespeicherten Prozeduren, die Sie verwenden, hängen vom Typ der Publikation 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 Publikation 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 Datenbank zu entfernen, führen Sie den DROP <objectname> Befehl im Publisher in der Publikationsdatenbank aus.

So löschen Sie einen Artikel aus einer Zusammenführungsveröffentlichung

  1. Führen Sie sp_dropmergearticle (Transact-SQL) aus, um einen Durch @article angegebenen Artikel aus einer durch @publication angegebenen Publikation zu löschen. Geben Sie bei Bedarf einen Wert von 1 für @force_invalidate_snapshot und einen Wert von 1 für @force_reinit_subscription an.

  2. (Optional) Um das veröffentlichte Objekt vollständig aus der Datenbank zu entfernen, führen Sie den DROP <objectname> Befehl im Publisher in der Publikationsdatenbank aus.

Beispiele (Transact-SQL)

Im folgenden Beispiel wird ein Artikel aus einer Transaktionsveröffentlichung gelöscht. Da diese Änderung die vorhandene Momentaufnahme ungültig macht, wird für den parameter @force_invalidate_snapshot ein Wert von 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 Zusammenführungsveröffentlichung gelöscht. Da diese Änderungen die vorhandene Momentaufnahme ungültig machen, wird für den parameter @force_invalidate_snapshot ein Wert von 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 programmgesteuert löschen, indem Sie Replikationsverwaltungsobjekte (Replication Management Objects, RMO) verwenden. Die RMO-Klassen, die Sie zum Löschen eines Artikels verwenden, hängen von der Art der Publikation ab, zu der der Artikel gehört.

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

  1. Erstellen Sie mithilfe der ServerConnection Klasse eine Verbindung mit dem Publisher.

  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 zu überprüfen, ob der Artikel vorhanden ist. Wenn der Wert dieser Eigenschaft lautet false, wurden entweder die Artikeleigenschaften in Schritt 3 falsch definiert oder der Artikel ist nicht vorhanden.

  6. Rufen Sie die Remove-Methode auf.

  7. Schließen Sie alle Verbindungen.

So löschen Sie einen Artikel, der zu einer Zusammenführungsveröffentlichung gehört

  1. Erstellen Sie mithilfe der ServerConnection Klasse eine Verbindung mit dem Publisher.

  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 zu überprüfen, ob der Artikel vorhanden ist. Wenn der Wert dieser Eigenschaft lautet false, wurden entweder die Artikeleigenschaften in Schritt 3 falsch definiert oder der Artikel ist nicht vorhanden.

  6. Rufen Sie die Remove-Methode auf.

  7. Schließen Sie alle Verbindungen.

Siehe auch

Hinzufügen von Artikeln zu und Ablegen von Artikeln aus vorhandenen Publikationen
Konzepte für gespeicherte Replikationssystem-Prozeduren