使用 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 Management Studio) 和How to: Specify Schema Options (Replication Transact-SQL Programming)。
- 在下列情况下,直接在 Transact-SQL 语法或在 Microsoft SQL Server Management Studio 中指定:
- 在发布数据库中创建或修改对象。
- 在订阅数据库中创建或修改对象。 通常只是在不使用快照的情况下初始化订阅时,才手动创建对象(而不是由复制创建)。
有关详细信息,请参阅: - CREATE TABLE (Transact-SQL)、ALTER TABLE (Transact-SQL)、CREATE TRIGGER (Transact-SQL) 和 ALTER TRIGGER (Transact-SQL)
- 如何对复制禁用外键约束 (Visual Database Tools)
- 如何对复制禁用检查约束 (Visual Database Tools)
请参阅
概念
帮助和信息
更改历史记录
发布日期 | 历史记录 |
---|---|
2007 年 9 月 15 日 |
|