【发布时间】:2019-01-13 02:05:08
【问题描述】:
使用 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_mck_DropSubscriptionArticle 是一个自定义过程。在其中添加了从订阅中删除文章的逻辑。
当我执行 alter 语句时,我收到以下错误
Could not find stored procedure 'IF EXISTS (SELECT 1 FROM SYS.TABLES WHERE NAME = 'NOTE') EXEC sp_mck_DropSubscriptionArticle 'NOTE''.
请帮我解决这个问题或建议我任何其他方法来解决这个问题
【问题讨论】:
标签: sql-server-2008-r2 ddl database-trigger transactional-replication