如何判断触发器代码是不是正在复制订阅服务器上执行?
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】:也许更好的选择是首先不在发布者端设置触发器,而在订阅者端设置触发器。或者您可以通过一些脚本在发布者端禁用触发器。
【讨论】:
以上是关于如何判断触发器代码是不是正在复制订阅服务器上执行?的主要内容,如果未能解决你的问题,请参考以下文章