使用约束方式(ENABLED 、DISABLED 和 FILTERING)选项来控制 INSERT 、DELETE 、MERGE 和 UPDATE 操作中约束的行为。
对于 CREATE TABLE 语句定义的约束,这些是可选的。
如果选择过滤方式,则可以指定 WITHOUT ERROR 或 WITH ERROR 选项。以下列表将说明这些 ERROR 选项。
约束方式注册在 sysobjstate 系统目录表中。
以上列出的方式只是 SET Database Object Mode 语句的 SET CONSTRAINTS 选项在其重置现有外键约束方式时可以指定的约束方式的一个子集。它们还是 ALTER TABLE ADD CONSTRAINT 语句在现有表上创建新的外键约束时能指定的约束方式的子集。
ALTER TABLE ADD CONSTRAINT 和 SET CONSTRAINTS 语句可在约束定义中包含 NOVALIDATE 关键字来指定这些额外外键约束方式中的一种方式。其效果是当创建或启用外键约束时,数据库服务器跳过对违例的现有行的检查,从而减少了处理 DDL 语句所需的时间和资源。然而,当语句执行完毕后,每个 NOVALIDATE 方式自动还原成 ENABLED 或 FILTERING 方式。因此,NOVALIDATE 关键字无法阻止随后表的 DML 操作的参照完整性的强制执行,因为 NOVALIDATE 关键字不能持续超越定义它们的 DDL 语句。
由于大多数表在它们创建后都是空表,因此对现有行的参照完整性检查一般不会在建立表时发生,而且 CREATE TABLE 语句不支持 NOVALIDATE 约束方式。然而,在有外键约束的非空表需要被移动到另一个数据库或数据仓库中的上下文中,这些方式是很有效率的。