适用范围:SQL Server
删除合并发布中的项目。 此存储过程在发布服务器上对发布数据库执行。
语法
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删除指定合并发布中的所有现有项目。 即使@articleall,发布也必须与项目分开删除。
[ @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> 手动删除这些对象。
权限
只有 sysadmin 固定服务器角色的成员
示例
本文中的代码示例使用 AdventureWorks2025 或 AdventureWorksDW2025 示例数据库,可以从 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';
EXECUTE sp_dropmergearticle
@publication = @publication,
@article = @article1,
@force_invalidate_snapshot = 1;
EXECUTE sp_dropmergearticle
@publication = @publication,
@article = @article2,
@force_invalidate_snapshot = 1;
GO
B. 删除合并联接筛选器和相关文章
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.
EXECUTE 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.
EXECUTE 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.
EXECUTE sp_dropmergearticle
@publication = @publication,
@article = @table3,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Drop the article for the SalesOrderHeader table.
EXECUTE sp_dropmergearticle
@publication = @publication,
@article = @table2,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Drop the article for the Employee table.
EXECUTE sp_dropmergearticle
@publication = @publication,
@article = @table1,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO