如何判断触发器代码是不是正在复制订阅服务器上执行?

Posted

技术标签:

【中文标题】如何判断触发器代码是不是正在复制订阅服务器上执行?【英文标题】:How can I tell if Trigger code is being executed at a Replication Subscriber?如何判断触发器代码是否正在复制订阅服务器上执行? 【发布时间】:2014-04-02 16:23:29 【问题描述】:

我有一个 SQL Server 2012 数据库正在发布以进行复制,并且在另一台服务器上定义了一个拉式订阅。我有一个需要在订阅者端执行的触发器,但是源数据库由第三方支持,因此为了减少他们通过执行表维护而无意中吹走我的触发器的机会,我在发布者上定义了触发器并设置了文章Copy User Triggers to True 选项。

这没问题,但我想要触发器在发布者处执行。 (这是使用 NOT FOR REPLICATION 选项的相反情况。)我目前通过在@@SERVERNAME 上的硬编码测试中包装触发逻辑来实现这一点,但我们每 5 年左右升级一次全公司的服务器,它硬编码为旧名称的东西坏了总是很痛苦的。

是否有系统视图或我可以测试的东西,而不是说“这个数据库是通过请求订阅到达这里的”?

谢谢

韦恩象牙

【问题讨论】:

【参考方案1】:

是的,这可以通过使用快照后脚本将触发器添加到订阅服务器来完成。看看Execute Scripts Before and After the Snapshot is Applied。这样就不会依赖于服务器名称,触发器只会存在于订阅服务器上。

【讨论】:

【参考方案2】:

也许更好的选择是首先不在发布者端设置触发器,而在订阅者端设置触发器。或者您可以通过一些脚本在发布者端禁用触发器。

【讨论】:

以上是关于如何判断触发器代码是不是正在复制订阅服务器上执行?的主要内容,如果未能解决你的问题,请参考以下文章

如何判断是不是正在访问数据库表?想要类似“SELECT 触发器”的东西

C#:是不是可以获得异常触发器? [复制]

如何在 type-graphql 中触发订阅?

SQL判断数据库是不是存在。

服务线上治理

如何检查我是不是已经订阅了 parse.com 推送通知