English 中文(简体)
在复制上的SQL Server触发器
原标题:
  • 时间:2009-02-12 17:16:41
  •  标签:

我需要创建一个 SQL Server 数据库,该数据库将通过某些复制机制从另一个数据库接收更新。我需要编写插入、更新和删除触发器,在进行复制时执行这些触发器。

我有触发器的经验,但没有复制的经验。

我应该使用事务性复制还是合并复制,还是两者都可以?

当执行简单的SQL插入语句时设计的触发器,在复制发生时也会运行吗? (Traditional Chinese: 當執行簡單的SQL插入語句時設計的觸發器,在複製發生時也會運行嗎?)

最佳回答

这取决于情况。

如果您要应用的更新是针对隔离的表,即某个表的所有数据仅来自发布者,则可以使用事务复制。

另一方面,如果您想将表内容,例如订单表,与在两个站点上下订单的订单结合起来,则需要考虑使用合并复制。

关于触发器,您可以应用“不用于复制”的配置以控制它们的行为。请参阅以下文章供参考。

将此翻译成中文:http://msdn.microsoft.com/en-us/library/ms152529.aspx http://msdn.microsoft.com/en-us/library/ms152529.aspx

干杯,约翰。

问题回答

在MSDN上的CREATE TRIGGER语法

CREATE TRIGGER
...
[ NOT FOR REPLICATION ] 

这意味着触发器默认情况下在复制上执行,可以通过指定NOT FOR REPLICATION来禁用。

根据您提供的信息很难回答您的问题。我在您的问题上添加了一些评论,要求您提供更明确的信息。

这里有一篇在MSDN上的文章应该会有所帮助:http://msdn.microsoft.com/en-us/library/ms152529.aspx

默认情况下,触发器会在复制期间触发,除非指定了“NOT FOR REPLICATION”。它们的工作方式与简单插入语句的工作方式相同。

事务复制和合并复制非常不同,但触发器在这两个选项中的行为相似。

有几个替代方案可以代替触发器。

  1. You could modify the replication procedures on the subscriber (destination) database.
  2. If using 2008 you can use Change Tracking on the subscriber for tables you want to "do something with" and then create a batch process to deal with "set based" data instead of invididual rows. E.g. an SSIS package that runs every X.




相关问题
热门标签