Sql server 2008 r2 DDL触发器,用于在项目被更改时将其从复制中删除

Sql server 2008 r2 DDL触发器,用于在项目被更改时将其从复制中删除,sql-server-2008-r2,ddl,database-trigger,transactional-replication,Sql Server 2008 R2,Ddl,Database Trigger,Transactional Replication,使用SQL Server 2008进行跨国复制 有时,我的团队成员会在开发期间更改表,然后在复制中从订阅中删除表。因此,它会导致环境中的复制失败。为了避免这种情况,我们计划编写一个DDL触发器,当表被修改时,它将从订阅中删除该表 下面是我为实现同样的目标而编写的触发器 CREATE TRIGGER RemoveArticleFromRepliction ON DATABASE FOR DROP_TABLE , ALTER_TABLE AS BEGIN SET NOCOUNT ON; DECL

使用SQL Server 2008进行跨国复制

有时,我的团队成员会在开发期间更改表,然后在复制中从订阅中删除表。因此,它会导致环境中的复制失败。为了避免这种情况,我们计划编写一个DDL触发器,当表被修改时,它将从订阅中删除该表

下面是我为实现同样的目标而编写的触发器

CREATE TRIGGER RemoveArticleFromRepliction ON DATABASE
FOR DROP_TABLE
, ALTER_TABLE AS

BEGIN
SET NOCOUNT ON;

DECLARE @EventData XML = EVENTDATA();
DECLARE @TableName VARCHAR(255) = @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)')

DECLARE @CMD VARCHAR(255) = 'IF EXISTS (SELECT 1 FROM SYS.TABLES WHERE NAME = ''' + @TableName + ''') EXEC sp_mck_DropSubscriptionArticle ''' + @TableName + ''''
EXEC @CMD
END
触发器已在SQL server 2008中成功应用

注意:
sp\u mck\u DropSubscriptionArticle
是一个自定义过程。在订阅中添加了从订阅中删除项目的逻辑

当我执行alter语句时,我得到以下错误

Could not find stored procedure 'IF EXISTS (SELECT 1 FROM SYS.TABLES WHERE NAME = 'NOTE') EXEC sp_mck_DropSubscriptionArticle 'NOTE''.

请帮助我解决此问题,或向我建议任何其他解决此问题的方法

看起来您缺少了
EXEC
后面的括号。请尝试下面更改的代码

CREATE TRIGGER RemoveArticleFromRepliction ON DATABASE
FOR DROP_TABLE
, ALTER_TABLE AS

BEGIN
SET NOCOUNT ON;

DECLARE @EventData XML = EVENTDATA();
DECLARE @TableName VARCHAR(255) = @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)')

DECLARE @CMD VARCHAR(255) = 'IF EXISTS (SELECT 1 FROM SYS.TABLES WHERE NAME = ''' + @TableName + ''') EXEC sp_mck_DropSubscriptionArticle ''' + @TableName + ''''
EXEC (@CMD)
END

谢谢你的帮助!