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'

要从中删除项目的发布的名称。 @publicationsysname,无默认值。

[ @article = ] N'article'

要从给定出版物中删除的项目的名称。 @articlesysname,无默认值。 如果 all删除指定合并发布中的所有现有项目。 即使@articleall,发布也必须与项目分开删除。

[ @ignore_distributor = ] ignore_distributor

指示是否在未连接到分发服务器的情况下执行此存储过程。 @ignore_distributor,默认值为 0.

[ @reserved = ] 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> 手动删除这些对象。

权限

只有 sysadmin 固定服务器角色的成员db_owner固定数据库角色的成员才能执行sp_dropmergearticle

示例

本文中的 Transact-SQL 代码示例使用 AdventureWorks2022AdventureWorksDW2022 示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。

A. 从合并发布中删除项目

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