Поделиться через


sp_dropmergearticle (Transact-SQL)

Область применения: SQL Server

Удаляет статью из публикации слиянием. Эта хранимая процедура выполняется на издателе в базе данных публикации.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_dropmergearticle
    [ @publication = ] N'publication'
    , [ @article = ] N'article'
    [ , [ @ignore_distributor = ] ignore_distributor ]
    [ , [ @reserved = ] reserved ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @ignore_merge_metadata = ] ignore_merge_metadata ]
[ ; ]

Аргументы

[ @publication = ] N'publication'

Имя публикации, из которой нужно удалить статью. @publication — sysname без значения по умолчанию.

[ @article = ] N'article'

Имя статьи, отбрасываемой из данной публикации. @article — sysname без значения по умолчанию. Если allвсе существующие статьи в указанной публикации слиянием удаляются. Даже если @article , allпубликация по-прежнему должна быть удалена отдельно от статьи.

[ @ignore_distributor = ] ignore_distributor

Указывает, исполняется ли данная хранимая процедура без подключения к распространителю. @ignore_distributor имеет значение по умолчанию0.

[ @reserved = ] зарезервировано

Зарезервировано для последующего использования. @reserved бит с значением по умолчанию0.

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

Определяет возможность недействительности моментального снимка. @force_invalidate_snapshot бит с значением по умолчанию0.

  • 0 указывает, что изменения в статье слияния не вызывают недопустимого моментального снимка.

  • 1 означает, что изменения в статье слияния могут привести к недопустимому моментальному снимку, и если это так, значение 1 дает разрешение на создание нового моментального снимка.

[ @force_reinit_subscription = ] force_reinit_subscription

Подтверждает, что удаление статьи требует повторной инициализации существующих подписок. @force_reinit_subscription бит с значением по умолчанию0.

  • 0 указывает, что удаление статьи не приводит к повторной инициализации подписки.

  • 1 означает, что удаление статьи приводит к повторной инициализации существующих подписок и дает разрешение на повторную инициализацию подписки.

[ @ignore_merge_metadata = ] ignore_merge_metadata

Указано только в ознакомительных целях. Не поддерживается. Совместимость с будущими версиями не гарантируется.

Значения кода возврата

0 (успешно) или 1 (сбой).

Замечания

sp_dropmergearticle используется в репликации слиянием. Дополнительные сведения об удалении статей см. в разделе "Добавление статей в существующие публикации" и "Удаление статей".

sp_dropmergearticle При удалении статьи из публикации объект не удаляется из базы данных публикации или соответствующего объекта из базы данных подписки. При необходимости эти объекты могут быть удалены вручную при помощи инструкции DROP <object>.

Разрешения

Могут выполняться sp_dropmergearticleтолько члены предопределенных ролей сервера sysadmin или db_owner предопределенных ролей базы данных.

Примеры

Примеры кода Transact-SQL в этой статье используют AdventureWorks2022 базу данных или AdventureWorksDW2022 пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.

А. Удаление статей из публикации слиянием

USE [AdventureWorks2022];
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';

EXEC sp_dropmergearticle @publication = @publication,
    @article = @article1,
    @force_invalidate_snapshot = 1;

EXEC sp_dropmergearticle @publication = @publication,
    @article = @article2,
    @force_invalidate_snapshot = 1;
GO
USE [AdventureWorks2022];
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;

-- Drop 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;

-- Drop the article for the SalesOrderDetail table.
EXEC sp_dropmergearticle @publication = @publication,
    @article = @table3,
    @force_invalidate_snapshot = 1,
    @force_reinit_subscription = 1;

-- Drop the article for the SalesOrderHeader table.
EXEC sp_dropmergearticle @publication = @publication,
    @article = @table2,
    @force_invalidate_snapshot = 1,
    @force_reinit_subscription = 1;

-- Drop the article for the Employee table.
EXEC sp_dropmergearticle @publication = @publication,
    @article = @table1,
    @force_invalidate_snapshot = 1,
    @force_reinit_subscription = 1;
GO