合并复制 - 在发布服务器和订阅服务器上触发的触发器

时间:2011-07-24 14:12:46

标签: sql-server sql-server-2008 replication sql-server-express

服务器版本:SQL Server 2008R2 客户端版本:SQL Server Express 2008R2

我在运行合并复制过程时遇到了似乎是锁定问题的问题。似乎是对订阅者进行了更改并与发布者同步。我很肯定是来自触发器,因为它出现了他们再次向发布者发射并可能尝试再次向订阅者发送数据。我在触发器中添加了“NOT FOR REPLICATION”,但这似乎并没有帮助。我也研究并尝试添加以下条款。

DECLARE @is_mergeagent BIT

SELECT @is_mergeagent = convert(BIT, sessionproperty('replication_agent'))

IF @is_mergeagent = 0 --IF NOT FROM REPLICATION

这似乎也没有帮助。如何使用插入/更新触发器处理合并复制?我可以阻止他们“双重”射击吗?

始终欣赏信息。

- S

2 个答案:

答案 0 :(得分:2)

不确定触发器触发但SESSIONPROPERTY会在此处给出NULL。所以随后的测试总是失败。

  

<Any other string> [give] NULL =输入无效。

您可能意味着APP_NAME

这至少应该有助于排除故障......

答案 1 :(得分:1)

我会在导致问题的表中添加一个位字段,并将其称为“已处理”或类似的东西。将其默认设置为false,然后在触发器更新该记录时设置为true,并在触发器执行任何操作之前让触发器检查false值,否则不执行任何操作。