Eliminazione di un articolo
Questo argomento descrive come eliminare un articolo in SQL Server 2014 usando Transact-SQL o Replication Management Objects (RMO). Per informazioni sulle condizioni per l'eliminazione degli articoli e sulla necessità di creare un nuovo snapshot o reinizializzare le sottoscrizioni in seguito all'eliminazione di un articolo, vedere Aggiungere ed eliminare articoli in pubblicazioni esistenti.
Uso di Transact-SQL
È possibile eliminare gli articoli a livello di programmazione tramite le stored procedure di replica. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione a cui appartiene l'articolo.
Per eliminare un articolo da una pubblicazione snapshot o transazionale
Eseguire sp_droparticle (Transact-SQL) per eliminare un articolo, specificato da @article, da una pubblicazione specificata da @publication. Specificare un valore pari a 1 per @force_invalidate_snapshot.
(Facoltativo) Per rimuovere completamente l'oggetto pubblicato dal database, eseguire il comando
DROP <objectname>
nel database di pubblicazione del server di pubblicazione.
Per eliminare un articolo da una pubblicazione di tipo merge
Eseguire sp_dropmergearticle (Transact-SQL) per eliminare un articolo, specificato da @article, da una pubblicazione specificata da @publication. Se necessario, specificare un valore pari a 1 per @force_invalidate_snapshot e un valore pari a 1 per @force_reinit_subscription.
(Facoltativo) Per rimuovere completamente l'oggetto pubblicato dal database, eseguire il comando
DROP <objectname>
nel database di pubblicazione del server di pubblicazione.
Esempi (Transact-SQL)
Nell'esempio seguente un articolo viene eliminato da una pubblicazione transazionale. Poiché questa modifica invalida lo snapshot esistente, viene specificato un valore pari a 1 per il parametro @force_invalidate_snapshot .
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
Nell'esempio seguente due articoli vengono eliminati da una pubblicazione di tipo merge. Poiché queste modifiche invalidano lo snapshot esistente, viene specificato un valore pari a 1 per il parametro @force_invalidate_snapshot .
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
Utilizzo di RMO (Replication Management Objects)
È possibile eliminare articoli a livello di programmazione tramite gli oggetti RMO (Replication Management Objects). Le classi RMO utilizzate per l'eliminazione di un articolo dipendono dal tipo di pubblicazione cui appartiene l'articolo.
Per eliminare un articolo che appartiene a una pubblicazione snapshot o transazionale
Creare una connessione al server di pubblicazione tramite la classe ServerConnection .
Creare un'istanza della classe TransArticle.
Impostare le proprietà Name, PublicationNamee DatabaseName .
Impostare la connessione del passaggio 1 per la proprietà ConnectionContext .
Controllare la proprietà IsExistingObject per verificare che l'articolo esista. Se il valore di questa proprietà è
false
, le proprietà dell'articolo sono state definite in modo non corretto nel passaggio 3 oppure l'articolo non esiste.Chiamare il metodo Remove .
Chiudere tutte le connessioni.
Per eliminare un articolo che appartiene a una pubblicazione di tipo merge
Creare una connessione al server di pubblicazione tramite la classe ServerConnection .
Creare un'istanza della classe MergeArticle.
Impostare le proprietà Name, PublicationNamee DatabaseName .
Impostare la connessione del passaggio 1 per la proprietà ConnectionContext .
Controllare la proprietà IsExistingObject per verificare che l'articolo esista. Se il valore di questa proprietà è
false
, le proprietà dell'articolo sono state definite in modo non corretto nel passaggio 3 oppure l'articolo non esiste.Chiamare il metodo Remove .
Chiudere tutte le connessioni.
Vedere anche
Aggiungere ed eliminare articoli in pubblicazioni esistenti
Replication System Stored Procedures Concepts