使用 NOT FOR REPLICATION 来控制约束、标识和触发器

更新日期: 2007 年 9 月 15 日

在某些情况下,最好将复制拓扑中的用户活动与代理活动区别对待。 例如,如果用户在订阅服务器上插入行且该插入满足表的检查约束,则复制代理在订阅服务器上插入该行时,可能不需要实施相同的约束。 通过 NOT FOR REPLICATION 选项可以指定在复制代理执行操作时,区别对待下列数据库对象:

  • 外键约束
    在复制代理执行插入、更新或删除操作时,不实施外键约束。
  • 检查约束
    在复制代理执行插入、更新或删除操作时,不实施检查约束。
  • 标识列
    在复制代理执行插入操作时,标识列的值不递增。
  • 触发器
    在复制代理执行插入、更新或删除操作时,不执行触发器。

发布表时,架构选项将控制在订阅数据库中创建对象的方式。 默认架构选项根据发布的不同而不同;当将选项设置为指定在订阅数据库中创建 FOREIGN KEY 约束和 CHECK 约束时,将设置 NOT FOR REPLICATION 选项。 复制支持可更新订阅的合并发布和事务发布中的标识列时,也设置 NOT FOR REPLICATION 选项。 有关复制标识列的详细信息,请参阅复制标识列

大多数情况下,默认设置都适用,但如果应用程序需要不同的行为,可以更改这些默认设置。 考虑的主要方面是触发器。 例如,如果定义一个插入触发器时设置了 NOT FOR REPLICATION 选项,则所有用户的插入操作都会触发该触发器,但复制代理的插入操作不会触发该触发器。 例如有一个将数据插入到跟踪表中的触发器:当用户初始插入行时,将触发该触发器并在跟踪表中写入行,但在将数据复制到订阅服务器时,不应触发该触发器,因为这会导致在跟踪表中插入不必要的行。

指定 NOT FOR REPLICATION 选项

可以通过下列方式指定 NOT FOR REPLICATION 选项:

请参阅

概念

所有类型复制的注意事项

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2007 年 9 月 15 日

更改的内容:
  • 阐明了何时会设置 NOT FOR REPLICATION 选项。